我需要为对象分配一个不可为空的外键字段,而既不在模板中显示此字段也不将其作为表单字段列出。
让我说一个模型:
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,然后在之后/期间将其分配给新对象表单验证。
答案 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')