bulk_create and ManyToManyField: bug ?

199 views
Skip to first unread message

Michael

unread,
May 7, 2012, 3:53:29 PM5/7/12
to django-d...@googlegroups.com
Hi,

I am using bulk_create on a ManyToMany relationship and I think there is a bug.
Here is the code:
class Company(models.Model):
    url = models.URLField(unique=True)

class Website(models.Model):
    url = models.URLField(unique=True) 
    companies = models.ManyToManyField(Company, null=True, blank=True)

list_companies = [Company(url='...'), Company(url='...')]
w.companies.bulk_create(list_companies)
-> [< Company:  Company object>, < Company:  Company object>]   #The 2 Company objects are created

w.companies.all()
-> []   # But the relationship is broken

The 2 companies are created but I cannot access to them through my many-to-many relationship.
I looked at the database and yes I can find the 2 companies in the company table but no rows in the website_company table.

What do you think ? Do you have the same behavior ?
Lemme know if I do it wrong.

Thanks
Michael

Anssi Kääriäinen

unread,
May 7, 2012, 4:04:31 PM5/7/12
to Django developers
Hmmh, I think you have found an oversight. Please open a ticket in
Trac. It is possible the fix is going to be just to disallow use of
bulk_create through relations, as fixing this properly is going to be
hard (to create the relation you need the PK of the objects created,
and bulk_create doesn't provide the PK if it comes from a
sequence...). Or, maybe just document that no, the relations are not
created for you. For reverse foreign key this could be fixed
however...

- Anssi

Michael

unread,
May 7, 2012, 4:46:10 PM5/7/12
to django-d...@googlegroups.com

Michael

unread,
May 7, 2012, 5:21:28 PM5/7/12
to django-d...@googlegroups.com
So the only option I have for now is to iterate through each object and call create right ?

list_companies = [Company(url='...'), Company(url='...')]
for c in list_companies:
    w.companies.create(c)

Best,
Michael
Reply all
Reply to author
Forward
0 new messages