tickets: 2361
This data as json
id | created | changetime | last_pulled_from_trac | stage | status | component | type | severity | version | resolution | summary | description | owner | reporter | keywords | easy | has_patch | needs_better_patch | needs_tests | needs_docs | ui_ux |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2361 | 2006-07-16 18:42:51 | 2020-09-24 09:56:27 | 2022-03-06 03:25:48.068546 | Accepted | new | Database layer (models, ORM) | Bug | normal | dev | QuerySet.filter(m2mfield__isnull=False) may return duplicates | My Django installation is SVN Revision: 3238 Filtering models by a ManyToMany field does not appear to work. See Google groups thread http://groups.google.com/group/django-users/browse_thread/thread/d0d799a45cb92d35 I have two classes -- Blog and Submission: {{{ class Blog( models.Model ): entries = models.ManyToManyField( Submission ) class Submission( models.Model ): [... whatever ] }}} I want to fetch a list of all Blog instances which have at least one Submission , i.e. entries.count() > 0. The suggested {{{ Blog.objects.filter(entries__isnull = False) }}} (suggested by Malcolm Tredinnick) returns: {{{ psycopg.ProgrammingError: FEHLER: Spalte m2m_models_blog__entries.entries existiert nicht SELECT "models_blog"."id","models_blog"."title","models_blog"."description","models_blog"."region_id","models_blog"."regionname","models_blog"."date_submitted","models_blog"."author_id","models_blog"."visible" FROM "models_blog" LEFT OUTER JOIN "models_blog_entries" AS "m2m_models_blog__entries" ON "models_blog"."id" = "m2m_models_blog__entries"."blog_id" WHERE ("m2m_models_blog__entries"."entries" IS NOT NULL) }}} m2m_models_blog__entries is an alias for models_blog_entries -- I *have* this table, but it has no column "entries". This is what it looks like: {{{ # \d models_blog_entries Tabelle »public.models_blog_entries« Spalte | Typ | Attribute ---------------+---------+--------------------------------------------------------------------- id | integer | not null default nextval('public.models_blog_entries_id_seq'::text) blog_id | integer | not null submission_id | integer | not null Indexe: »models_blog_entries_pkey« PRIMARY KEY, btree (id) »models_blog_entries_blog_id_key« UNIQUE, btree (blog_id, submission_id) Fremdschlüssel-Constraints: »models_blog_entries_blog_id_fkey« FOREIGN KEY (blog_id) REFERENCES models_blog(id) »models_blog_entries_submission_id_fkey« FOREIGN KEY (submission_id) REFERENCES models_submission(id) }}} Also, if I do this: {{{ Blog.objects.filter(entries__blog__id__isnull = False) }}} I get a list of Blogs which have entries, however I have duplicates in the list, one for each Submission which is in a M2M relationship (i.e. each Blog is shown n times if it has n entries). | cgdeboer | daniel.tietze@gmail.com | 0 | 0 | 0 | 0 | 0 | 0 |