Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提交Django表单时分配外键_Django - Fatal编程技术网

提交Django表单时分配外键

提交Django表单时分配外键,django,Django,我需要为一个对象分配一个不可为空的外键字段,而不在模板中显示该字段,也不将其作为表单字段列出 假设我有一个模型: class SampleRecord(models.Model): foreign_key = models.ForeignKey(OtherModel, blank=False) some_field = models.CharField(...) 我调用的URL模式有一个参数,该参数确定我将为哪个OtherModel对象分配新的SampleRecord,因此我不

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

假设我有一个模型:

class SampleRecord(models.Model):
    foreign_key = models.ForeignKey(OtherModel, blank=False)
    some_field = models.CharField(...)
我调用的URL模式有一个参数,该参数确定我将为哪个
OtherModel
对象分配新的
SampleRecord
,因此我不需要添加
外键
字段来形成,因为每次调用负责的URL模式时:

.../new-record/123
我知道我需要创建一个新的
samplecord
实例,分配给pk
123
OtherModel
对象
SampleRecord
对象在未分配给
OtherModel
的情况下可能不存在,因此
外键
字段不能为
null
!这意味着提交表单时它必须在那里。在这种情况下,我想使用一个表单来创建新的
SampleRecord
,我不想在这个表单中确定外键为字段,因为它需要我为它设置一个值:

class MyForm(forms.ModelForm):
    class Meta:
        model = SampleRecord
        fields = ['some_field']

我知道我需要在表单中重写
save
方法,但我不知道如何从视图中将
OtherModel
对象传递给一个对象,然后在表单验证之后/期间将其分配给新对象。

我对Django也是新手,但当我这样做时,它是在视图中完成的,而不是在表单中完成的。在我看来,我使用这种方法:

 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')

谢谢你的回答,但这并不完全适用于我的问题。我对这个问题做了一些更新,使事情更清楚。