这是我的模型

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/

10-13 07:11