| 1 |
Index: django/db/models/query.py |
|---|
| 2 |
=================================================================== |
|---|
| 3 |
--- django/db/models/query.py (revision 5061) |
|---|
| 4 |
+++ django/db/models/query.py (working copy) |
|---|
| 5 |
@@ -853,6 +853,13 @@ |
|---|
| 6 |
return None |
|---|
| 7 |
return matches[0] |
|---|
| 8 |
|
|---|
| 9 |
+def field_choices(field_list, related_query): |
|---|
| 10 |
+ if related_query: |
|---|
| 11 |
+ choices = [f.field.related_query_name() for f in field_list] |
|---|
| 12 |
+ else: |
|---|
| 13 |
+ choices = [f.name for f in field_list] |
|---|
| 14 |
+ return choices |
|---|
| 15 |
+ |
|---|
| 16 |
def lookup_inner(path, lookup_type, value, opts, table, column): |
|---|
| 17 |
qn = backend.quote_name |
|---|
| 18 |
joins, where, params = SortedDict(), [], [] |
|---|
| 19 |
@@ -937,7 +944,11 @@ |
|---|
| 20 |
except FieldFound: # Match found, loop has been shortcut. |
|---|
| 21 |
pass |
|---|
| 22 |
else: # No match found. |
|---|
| 23 |
- raise TypeError, "Cannot resolve keyword '%s' into field" % name |
|---|
| 24 |
+ choices = field_choices(current_opts.many_to_many, False) + \ |
|---|
| 25 |
+ field_choices(current_opts.get_all_related_many_to_many_objects(), True) + \ |
|---|
| 26 |
+ field_choices(current_opts.get_all_related_objects(), True) + \ |
|---|
| 27 |
+ field_choices(current_opts.fields, False) |
|---|
| 28 |
+ raise TypeError, "Cannot resolve keyword '%s' into field, choices are: %s" % (name, ", ".join(choices)) |
|---|
| 29 |
|
|---|
| 30 |
# Check whether an intermediate join is required between current_table |
|---|
| 31 |
# and new_table. |
|---|