This is my model
class Business(models.Model):
business_type = models.ManyToManyField(BusinessType)
establishment_type = models.ForeignKey(EstablishmentType)
website = models.URLField()
name = models.CharField(max_length=64)
def __unicode__(self):
return self.name
in my view I’m trying to save a record as follows:
business = BusinessForm(request.POST or None)
if business.is_valid():
busi = business.save(commit=False)
bt = BusinessType.objects.get(id=6)
busi.business_type = bt
et = EstablishmentType.objects.get(id=6)
busi.establishment_type = et
busi.save()
However, it gives me an error
'Business' instance needs to have a primary key value before a many-to-many relationship can be used.
How do i save this?
You need to save the instance of the model before adding any m2m fields. Remember you have to add the m2m field with the
.add()method, not assign it directly to the field as you are doing.Note that the
save_m2mmethod is available on themodelformobject when you doform_obj.save(commit=False). If the model form was given m2m data, you should use the save_m2m method. If you want to assign it manually like you’re doing, you need to add it separately like my code above.