我的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指定默认值。我希望当模型在模板上呈现时,应该选择第一个选择对象。
答案 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。