Django - 如何在不允许用户输入的情况下为ModelForm设置默认的ForeignKey值

时间:2012-07-19 15:01:50

标签: django foreign-keys modelform

我已经使用模型PageMark构建了一个小应用。

Mark还有一个ModelFormMarkForm,我告诉他将其所有属性显示为小部件,ForeignKey除外,editable=False }。 PageMark之间存在一对多的关系 - 一个Page,多个Marks

但是,当我尝试提交MarkForm时,它会说明ForeignKey字段不能为空 - 有没有办法自动告知表单(在服务器端),那么html中不会有表单输出(我不希望用户能够将marks添加到其他Pages)。

如果我遗失了什么,请告诉我,也许我在模特或观点中做错了。这是一些代码:

class Mark(models.Model):
    page  = models.ForeignKey(Page, editable=False)
    x = models.IntegerField()
    y = models.IntegerField()
    width = models.IntegerField()
    height = models.IntegerField()
    body = models.CharField(max_length=200)

class MarkForm(forms.ModelForm):
    class Meta:
        model = Mark
        widgets = {
            'x': HiddenInput(),
            'y': HiddenInput(),
            'width': HiddenInput(),
            'height': HiddenInput(),
            'body': HiddenInput(),
        }

1 个答案:

答案 0 :(得分:2)

要排除某个字段,您可以do it in the ModelForm's Meta class

要预先设置字段值,您可以在视图中执行,例如:

if request.method == 'POST':
        form = MarkForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.page = myid
            obj.save()