Python 为django ModelForm ManyToMany字段设置默认值或实例
在django应用程序中,我有两个模型,其中一个模型到另一个模型中有许多字段。我想为许多字段设置默认值,但没有办法做到这一点。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
我的模特是
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()
tryreturn[Model1.objects.first().pk]
我知道这很旧,但我在寻找类似的东西时偶然发现了这一点。希望这能为某些人节省一些时间:django在ManyToManyField的“默认值”中的表现似乎并不像预期的那个样。。。我必须使用中建议的信号。