为django ModelForm ManyToMany字段设置默认值或实例

时间:2015-03-27 13:10:41

标签: python django django-models django-forms

我的django应用程序中有两个模型,我在其中一个模型中有ManyToMany字段。我想为ManyToMany字段设置默认值,但无法执行此操作。
我的模特是

Class Model1(models.Model):
    name = models.CharField(max_length=100)

class Model2(models.Model):
    model1 = models.ManyToManyField(Model1, null=True, blank=True, default=Model1.objects.first())

但使用此我收到此错误

    raise AppRegistryNotReady("Models aren't loaded yet.")
    django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

我通过定义一个显式变量(如

)来尝试它
m1 = Model1.objects.first()
and assigning this m1 variable to the field as default but same error again.

请建议如何在django中为M2Mfield指定默认值。我希望当模型在模板上呈现时,应该选择第一个选择对象。

1 个答案:

答案 0 :(得分:0)

考虑到Django解析模型类的方式,你不能这样做,因为"模型尚未加载" < =>默认设置为"解析时间"

但你可以使用callable作为默认值。

def get_first_model1():
    return Model1.objects.first()

class Model2(models.Model):
    model1 = models.ManyToManyField(Model1, null=True, blank=True, default=get_first_model1)

你应该使用的是不可调用的结果值,因此缺少括号。

通过此修改,如果您未提供model1属性值,则在创建新Model2时将在执行时调用default callable。