使用Django

时间:2015-06-18 09:29:37

标签: angularjs django forms dynamicform

我有一个使用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()。好吧,我不想显示这些。我试图添加我的函数的初始化:

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

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

我真的不想在调用时加载表单,但在我的页面首次加载时执行此操作。有没有选择可以帮我这么做?

Cheers guyz, 继续摇摆

2 个答案:

答案 0 :(得分:1)

您需要指定model_1的{​​{1}}字段可以为null,如下所示: Allow null in foreign key to user. Django

Model2

答案 1 :(得分:0)

我找到了如何处理这个问题。这是非常愚蠢的,我没有给你所有问题的参数。

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

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

希望我足够清楚。干杯