Django 在通用更新视图中使用内联表单集通过外键编辑相关对象
从django文档中可以清楚地看到 但是,如果按照文档中的一个示例,您希望通过Authors通用更新视图编辑与作者相关的书籍,该怎么办 以下方面是否有更好的或替代方法:Django 在通用更新视图中使用内联表单集通过外键编辑相关对象,django,inline-formset,Django,Inline Formset,从django文档中可以清楚地看到 但是,如果按照文档中的一个示例,您希望通过Authors通用更新视图编辑与作者相关的书籍,该怎么办 以下方面是否有更好的或替代方法: 创建其他表单集,并将其添加到通用更新视图的get_context_data()方法中的上下文中 在通用更新视图的form_valid()方法中处理这个额外的表单集-检查它是否有效,并保存或更新上下文,如果无效则返回 models.py from django.db import models class Author(mode
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
views.py
class AuthorUpdate(UpdateView):
model = Author
fields = '__all__'
def get_context_data(self, **kwargs):
data = super(AuthorUpdate, self).get_context_data(**kwargs)
BooksFormSet = inlineformset_factory(Author, Book, fields='__all__', extra=1)
if self.request.POST:
# Create a formset instance to edit an existing model object,
# but use POST data to populate the formset.
data['books'] = BooksFormSet(self.request.POST, instance=self.get_object())
else:
# Create a formset with the data from model object and add it to context
data['books'] = BooksFormSet(instance=self.get_object())
return data
def form_valid(self, form):
context = self.get_context_data()
books = context['books']
with transaction.atomic():
self.object = form.save()
if books.is_valid():
books.instance = self.object
books.save()
else:
context.update({'books': books})
return self.render_to_response(context)
return super(AuthorUpdate, self).form_valid(form)