【发布时间】:2018-06-18 03:33:50
【问题描述】:
我有一个模型 Book,它在模型库上有一个 ForeignKey。图书馆中可以有多本书。由于每本书的信息都很简短(作者、年龄、成本),我想在一个表单上列出图书馆中的所有书籍,并让用户能够一次更新所有 3 个字段。有一个date 字段和一个library_id 字段确定每天将哪些书籍添加到图书馆。我们将假设不能以当前形式添加新书。
class Library(models.Model):
user ...
library_id = models.CharField(max_length=120, blank=True)
updated = models.DateTimeField(auto_now=True)
class Book(models.Model):
library_id = models.ForeignKey(Library)
date = models.DateField(default=None, blank=True, null=True)
author = models.CharField(max_length=50, blank=True)
age = models.IntegerField(default=0, min=0)
cost = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
updated = models.DateTimeField(auto_now=True)
class Meta:
unique_together = (('library_id ', 'date'),)
我希望能够为特定图书馆选择日期,并能够一次更新所有书籍的所有信息。这意味着在后端,我将更新 Book 类中的多条记录。我看到这个存在:inlineformset_factory,但是当我尝试使用它时(见下文),我仍然只得到一个表单。
forms.py
class LibraryChangeForm(forms.ModelForm):
class Meta:
model = Book
exclude = ['updated']
BookFormSet = inlineformset_factory(Library, Book, exclude = ['updated'])
views.py
class LibraryUpdateView(LoginRequiredMixin, UpdateView):
model = Library
form_class = LibraryChangeForm
def get_context_date(self, **kwargs):
context = super(LibraryUpdateView, self).get_context_data(**kwargs)
context['form'] = LibraryChangeForm(self.request.POST, instance=self.object)
context['book_form'] = BookFormSet(self.request.POST, instance=self.object)
return context
html - 仅 {{form}} 和 {{form.as_p}} 有效
{% extends "base.html" %}
{% block content %}
{{form}}
{{book_form}}
{{form.as_p}}
{{form2}}
{% endblock %}
简而言之,我想迭代特定库/日期的所有实例,并让用户一次更新所有实例。
【问题讨论】:
标签: django django-models django-forms