我正在尝试找到一种简单的方法来创建一个表单,该表单允许同时编辑具有外键关系的两个模型。
经过研究,似乎Inline表单集非常接近我想要做的事情。
django文档提供了以下示例:
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)
然后,
>>> from django.forms import inlineformset_factory
>>> BookFormSet = inlineformset_factory(Author, Book, fields=('title',))
>>> author = Author.objects.get(name='Mike Royko')
>>> formset = BookFormSet(instance=author)
假设Author
有第二个字段city
。我可以使用fields
参数在表格中添加城市吗?
如果没有内联表单集,是否还有另一种方式可以生成此联合表单?
经过更多研究后,我发现了Django模型Form。包括2009年相关模型中的字段,这些字段暗示内联表单集可能不是行之有效的方法。
如果有其他工厂的默认解决方案,我将非常感兴趣。
好吧,这与链接的帖子有点不同,因为那里的关系是aOneToOne
而不是a ForeignKey
。
没有Django工厂(至少我知道)可以自动执行您想要的操作。您可以尝试以下方法:
ModelForm
为依赖表创建一个(Book
在这种情况下):
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ['name', 'city', 'other_field', ...]
inline_formset
为依赖表创建一个:
BookFormSet = inlineformset_factory(Author, Book, form=BookForm)
在视图中使用表单集:
def my_view(request):
if request.method == 'POST':
formset = BookFormSet(request.POST, instance=request.user)
if formset.is_valid():
...
formset.save()
else:
formset = BookFormSet(instance=request.user)
return render_to_response("template.html", {"formset": formset})
或在基于类的视图中:带有内联模型形式或表单集的django基于类的视图
最后在模板中(这部分需要花点时间才能弄清楚,但这是一个一般性的想法):
<form action="." method="post">
{% csrf_token %}
{{ formset }}
{{ formset.management_form }}
<input type="submit" value="Submit">
</form>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句