bulk_create and ManyToManyField: bug ?

Showing 1-4 of 4 messages
bulk_create and ManyToManyField: bug ? Michael 5/7/12 12:53 PM
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
Re: bulk_create and ManyToManyField: bug ? Anssi Kääriäinen 5/7/12 1:04 PM
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
Re: bulk_create and ManyToManyField: bug ? Michael 5/7/12 1:46 PM
Re: bulk_create and ManyToManyField: bug ? Michael 5/7/12 2:21 PM
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