#2216 closed defect (fixed)
Filtering by a field having same name as the model results in AttributeError
Reported by: | anonymous | Owned by: | Russell Keith-Magee |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | normal | Keywords: | |
Cc: | mir@… | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
For model
class Color(models.Model): color = models.TextField(maxlength=100) similar_colors = models.ManyToManyField("self")
filtering does not work by field "color": Color.objects.filter(color="Light") results in AttributeError: 'RelatedObject' object has no attribute 'column'
Without the similar_colors relation, the filtering works fine.
Change History (5)
comment:1 by , 19 years ago
Cc: | added |
---|
comment:2 by , 19 years ago
Owner: | changed from | to
---|
Looks like a problem with related_query_name() on RelatedObject returning the wrong name. I'll look into it.
comment:3 by , 19 years ago
It turns out that related_query_name() is ok - your model is an edge case invalid model that isn't currently identified. The field name color clashes with the query term for the m2m relation with self. We don't currently validate for clashes in query terms - but we should. I'm working on a fix.
comment:4 by , 19 years ago
Russell, can you have a quick look at #1839 if your comment applies to it, too? It's also about the field_name==model_name, but in a on-to-many relationship, and the error message is different.
Michael
comment:5 by , 19 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
(In [3215]) Fixes #2216 -- Added extra tests for model validity, and cleaned up warning messages for existing tests. Models are now invalid if the query string required to access a field (or related object) would clash with the name of another field (or related object). Previous tests only checked the accessor names, not the query string.
Looks very similar to #1839 (ForeignKey('self') with attribute name like model name breaks AddManipulator().save()).
The error message is slightly different, so it's only *perhaps* a duplicate ;-)