提交Django表单时分配外键

时间:2018-08-06 20:46:23

标签: django

我需要为对象分配一个不可为空的外键字段,而既不在模板中显示此字段也不将其作为表单字段列出。

让我说一个模型:

class SampleRecord(models.Model):
    foreign_key = models.ForeignKey(OtherModel, blank=False)
    some_field = models.CharField(...)

我正在调用的URL模式有一个参数,该参数确定将向其分配新的OtherModel对象到哪个SampleRecord对象,因此我不需要向Form中添加foreign_key字段,因为每个时间负责的网址格式称为:

.../new-record/123

我知道我需要创建一个新的SampleRecord实例,该实例分配给具有pk OtherModel的{​​{1}}对象。 123个对象如果不分配给SampleRecord可能不存在,因此OtherModel字段不能为foreign_key!这意味着在提交表单时必须在其中。在这种情况下,我想使用表单来创建新的null,并且我不想在此表单中将foreign_key确定为字段,因为这需要我为其设置一个值:

SampleRecord

我了解到我需要在表单中覆盖class MyForm(forms.ModelForm): class Meta: model = SampleRecord fields = ['some_field'] 方法,但是我不了解如何从视图中将save对象传递给a,然后在之后/期间将其分配给新对象表单验证。

1 个答案:

答案 0 :(得分:1)

我也是Django的新手,但是当我这样做时,它是在View中而不是在Form中完成的。我在视图中使用了这种方法:

 def post(self, request):
    form = self.form_class(request.POST)

    if form.is_valid():
        sub = form.save(commit=False)
        sub.sample_record_fk = SampleRecord.objects.get(pk=your_definition)
        sub.save()

        return redirect('Some URL')