用于同时编辑具有外键关系的两个Django模型的表单

我正在尝试找到一种简单的方法来创建一个表单,该表单允许同时编辑具有外键关系的两个模型。

经过研究,似乎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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Django中具有外键关系的两个模型中选择值

如何为具有相同关系的两个外键的模型编写关联?

Django-具有两个以上外键的模型

将具有外键关系的两个模型数据传递给一个html模板

Django:两个模型的外键

具有两个外键的两个表之间的Laravel关系

具有两个相同外键的Django Inlineformset

从具有Spring和JPA批注的两个表之间具有外键关系的html表单(使用Thymeleaf)保存数据的问题

django模型外键访问两个模型的属性

具有两个外键关系的 CreateView 时出现 KeyError

无法在具有 FK 关系的单个提交/视图流中处理两个模型表单?

Django:模型通过中间模型具有两个ManyToMany关系

具有两个外键的中间模型:文件结构?

如何为具有两个外键的模型创建范围?

带有两个外键字段指向同一个外模型的模型的 Django 聚合?

INSERT (values) INTO 两个有外键关系的表

Django中具有多个外键的模型中的表单

tomatoany关系在Django中可以有两个外键吗?

Django获取的对象是两个模型的外键

Django:使用通用外键链接两个模型

当您有两个通过Django外键连接的模型时,是否需要进行联接?

当模型具有两个具有不同 on_delete 约束的外键时,预期行为是什么?

Django使用两个外键保存两个模型

两个模型之间的Django关系

具有多个外键的 Django 模型

Laravel 关系,一个数据库有两个外键

加入具有 ManyToMany 关系的两个表并将数据保存在 Django 的中间模型中

Django:删除具有外键关系的模型时,无法调用“ str”对象

查询Django建模两个级别的外键关系