0

我有一个带有 AngularJs 和 Django 的单页应用程序。在我的主页上,我获得了加载页面时所需的所有表单。但是,某些字段是动态更新的。

假设我有

class Model1(models.Model):
    pass

class Model2(models.Model):
   model_1 = models.ForeignKey(Model1)

形式:

class Model2Form(forms.ModelForm):
    class Meta:
        model = Model2
        fields = ('model_1', )

我的 SPA 允许我创建 Model1 的实例(无需重新加载页面)。我知道如何过滤显示的选项并在选择字段中动态添加新实例但是这样做,当第一次呈现 html 时,在发生角度魔术并过滤可用选项之前,我得到了 django 制作的查询集,它是默认情况下 model.objects.all()。好吧,我不想显示这些。我试图在我的函数的 init 中添加:

self.fields['model_1'].queryset = Model1.objects.none()

确实,当第一次呈现表单时,选择字段中没有显示任何选项,但是,我无法验证我的表单,我收到错误:(Select a valid choice. That choice is not one of the available choices.显然,由于 queryset.none() 没有可用的选项)

我真的不想在调用时加载表单,而是在我的页面第一次加载时加载。有什么选择可以帮助我这样做吗?

干杯家伙,继续摇摆

4

2 回答 2

1

您需要指定该model_1字段Model2可以为空,如此处指定: Allow null in foreign key to user。姜戈

model_1 = models.ForeignKey(Model1, null=True, blank=True, default = None)
于 2015-06-18T09:35:10.170 回答
0

我知道如何处理这个问题。太傻了,我没有给你问题的所有参数。

表单在加载时呈现,但是当我验证它时,它会通过 CRUD 操作,此时会初始化OTHER表单,它将处理我发送的数据。因此,我可以根据一些额外的 kwargs 覆盖该(第二个)表单的 init 中的查询集,以区分我用于第一次渲染的表单和处理我的数据的表单。

无需使任何字段为空或添加额外的验证。

希望我足够清楚。干杯

于 2015-06-18T12:50:32.143 回答