【问题标题】:Django - How to set default ForeignKey value for ModelForm without allowing user inputDjango - 如何在不允许用户输入的情况下为 ModelForm 设置默认 ForeignKey 值
【发布时间】:2012-07-19 15:01:49
【问题描述】:

我用PageMark 模型构建了一个小应用程序。

Mark 也有一个ModelFormMarkForm,我告诉过它要将其所有属性显示为小部件,除了ForeignKey,它是editable=FalsePageMark 之间存在一对多的关系 - 一个 Page,许多 Marks

但是,当我尝试提交 MarkForm 时,它会提醒 ForeignKey 字段不能为空 - 有没有办法自动告诉表单(在服务器端),这样就不会了t 是 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(),
        }

【问题讨论】:

    标签: django foreign-keys modelform


    【解决方案1】:

    要排除某个字段,您可以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()
    

    【讨论】:

    • 它给了我这个:Cannot assign "1": "Mark.page" must be a "Page" instance.
    • 好吧,那就给他一个页面实例。 obj.page = Page.objects.get(id=1)
    • 如果page 字段在模型中不为空怎么办? is_valid() 电话会失败,对吗?那么,我该如何进行呢?
    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 2022-11-16
    • 2016-07-23
    • 2017-11-13
    • 2022-11-12
    • 2020-01-08
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多