通过排除字段来使用更新视图django编辑模型对象

时间:2013-07-29 07:23:13

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

我正在使用django Edit/Update

尝试Updateview模型对象(记录)

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字段,则无需提交外键值?(因为编辑表单仅在每个字段都有效包括Author Foreign Key提交的值是多少?)

1 个答案:

答案 0 :(得分:7)

定义排除字段的BookForm,

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

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

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