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

Python 为django ModelForm ManyToMany字段设置默认值或实例,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,在django应用程序中,我有两个模型,其中一个模型到另一个模型中有许多字段。我想为许多字段设置默认值,但没有办法做到这一点。 我的模特是 Class Model1(models.Model): name = models.CharField(max_length=100) class Model2(models.Model): model1 = models.ManyToManyField(Model1, null=True, blank=True, default=Mode

在django应用程序中,我有两个模型,其中一个模型到另一个模型中有许多字段。我想为许多字段设置默认值,但没有办法做到这一点。
我的模特是

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。我希望在模板上呈现modelform时选择选项的第一个对象。

鉴于Django解析模型类的方式,您不能这样做,因为“尚未加载模型”默认设置为“解析时”

但是你可以使用一个可调用函数作为默认值

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。

给定的解决方案在一定程度上有效。它没有告诉我
模型尚未加载
错误,但在模板中,它给出了错误
'int'对象不可编辑
,并且在终端上有一个错误`selected_choices=set(在selected_choices中v的强制文本(v))TypeError:'int'对象不可编辑`code可用于为新创建的对象设置默认值。关于表单,这篇文章可能会有所帮助:我认为M2M字段的默认值应该是
pk
,所以不要使用
returnmodel1.objects.first()
try
return[Model1.objects.first().pk]
我知道这很旧,但我在寻找类似的东西时偶然发现了这一点。希望这能为某些人节省一些时间:django在ManyToManyField的“默认值”中的表现似乎并不像预期的那个样。。。我必须使用中建议的信号。