这是我的模型
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
在我看来,我正在尝试按如下方式保存记录:
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()
但是,它给了我一个错误
'Business' instance needs to have a primary key value before a many-to-many relationship can be used.
我如何保存这个?
最佳答案
在添加任何 m2m 字段之前,您需要保存模型的实例。请记住,您必须使用 .add()
方法添加 m2m 字段,而不是像您所做的那样直接将其分配给该字段。
if business.is_valid():
busi = business.save(commit=False)
et = EstablishmentType.objects.get(id=6)
busi.establishment_type = et
busi.save()
bt = BusinessType.objects.get(id=6)
busi.business_type.add(bt)
请注意,当您执行
save_m2m
时, modelform
方法可用于 form_obj.save(commit=False)
对象。如果模型表单被赋予了 m2m 数据,你应该使用 save_m2m 方法。如果你想像你正在做的那样手动分配它,你需要像我上面的代码一样单独添加它。关于Django:实例在多对多关系之前需要有一个主键值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6090859/