提交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
实例,分配给pk123
的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')
谢谢你的回答,但这并不完全适用于我的问题。我对这个问题做了一些更新,使事情更清楚。