我正在尝试使用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_name
,form.amount
等的单个字段,(我知道这种方法并不能解决上述问题,而只是提供了愚蠢的尝试)。当我提交表单时,它的 Action 可以忽略不计,什么也不做,因为我们没有提交author foreign key value
,因此表单无效,并且提交不做任何事情所以我想知道的是如何在使用
UpdateView
编辑模型时将字段从模型中排除(我在上面的代码中做错了什么吗?)我也想知道
Updateview
的概念,即如果我们排除foreignKey
字段,则无需提交外键值?(因为仅当包括Author Foreign Key
的每个字段都带有值提交时,编辑表单才有效?) 最佳答案
定义一个不包含该字段的BookForm,
class BookForm(forms.ModelForm):
class Meta:
model = Book
exclude = ('author',)
然后在您的 View 中使用此表单
class BookEditView(generic.UpdateView):
model = Book
form_class = BookForm
...