【问题标题】:Editing the model object with update view django by excluding fields通过排除字段使用更新视图 django 编辑模型对象
【发布时间】:2013-07-28 21:32:26
【问题描述】:

我正在尝试使用 django UpdateviewEdit/Update 一个模型对象(记录)

model.py

from django.db import models
from myapp.models import Author

class Book(models.Model):
    author = models.ForeignKey(Author)
    book_name = models.CharField(max_length=260)
    amount = models.DecimalField(
        max_digits=10, decimal_places=2, default=0.00)

    description = models.TextField()

views.py

class BookEditView(generic.UpdateView):
    model = Book
    template_name_suffix = '_update_form'
    exclude = ('author',)

    def get_success_url(self):
        return reverse("books:list_of_books")

books_update_from.html

{% extends "base.html" %}
{% block main_title %}Edit Book{% endblock %}
{% block content %}
  <form method="post" action="" class="form-horizontal">
     {{form.as_p}}
  </form>
{% endblock %}

当表单被渲染时,Author 外部字段仍然显示在页面上,即使我在exclude 中提到了它,BookEditview 如上所述

那么如何隐藏该字段并提交表单?

我还尝试通过渲染单个字段,如form.book_nameform.amount 等,(我知道这种方法不能解决上述问题,但只是进行了一次愚蠢的尝试)。当我提交表单时,它的动作可以忽略不计并且什么都不做,因为我们没有提交author foreign key value,因此表单无效并且提交什么都不做

所以我想知道的是如何在使用UpdateView 将其呈现为表单以编辑模型时从模型中排除字段(我在上面的代码中做错了吗?)

我还想知道Updateview 的概念,如果我们排除foreignKey 字段,那么就不需要提交外键值?(因为编辑表单只有在每个字段包括@987654335 时才有效@ 是带值提交的?)

【问题讨论】:

    标签: python django view django-models django-forms


    【解决方案1】:

    定义一个排除字段的 BookForm,

    class BookForm(forms.ModelForm):
        class Meta:
            model = Book
            exclude = ('author',)
    

    然后在您的视图中使用此表单

    class BookEditView(generic.UpdateView):
        model = Book
        form_class = BookForm
        ...
    

    【讨论】:

    • :谢谢回复,k有什么方法可以在我们点击提交的时候提交外键值吗?我的意思是我们可以在 form_data 或某些方法中覆盖这种行为吗?
    • 如果您想更改作者,您可以覆盖form_valid 方法。请参阅文档中的this example。否则,我不确定您的意思 - 当您故意将其从表单中排除时,为什么要提交该值?
    • 对不起,我的意思是如果我们没有为此编写表单类。无论如何,我从上面的答案中得到了解决方案,但是如果我们还没有创建表单类,还想更进一步吗?如何排除外部字段,因为排除在 Updateview 中不起作用
    • UpdateView 没有 exclude 选项。创建自定义表单是正确的方法。
    • 有谁知道是否可以为这个新创建的表单设置样式?如何在模板中设置表单的各个字段和标签的样式?
    猜你喜欢
    • 2015-11-30
    • 2016-03-10
    • 1970-01-01
    • 2012-12-26
    • 2017-08-08
    • 2020-08-13
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多