首页 > 解决方案 > 具有相同父子模型的django内联表单集

问题描述

我有一个 Person 模型,它的parent字段是自身的外键,所以这个模型的任何实例都可以有一个父模型,它是同一模型的另一个实例。

我想要实现的是使用 django 提供的内联表单集添加/更新 Person 的子级。但是我遇到的问题是 inlineformset 需要不同的父模型和子模型。

模型.py

from django.db import models

# Create your models here.


class FamilyMember(models.Model):
    name = models.CharField(max_length=20)
    age = models.PositiveIntegerField(null=True, blank=True)
    job = models.CharField(max_length=20, null=True, blank=True)
    parent = models.ForeignKey('self',
                               blank=True,
                               null=True,
                               related_name='children',
                               on_delete=models.CASCADE)

视图.py

def add_child(request):
    member = FamilyMember.objects.get(name="Tom")
    child_formset_factory = inlineformset_factory(FamilyMember, FamilyMember, fields=('parent',))

    formset = child_formset_factory(instance=member)
    return render(request, "family/add_child.html", {"formset": formset})

模板.py

{% block content %}
<form method="post">
    {{ formset.management_form }}
    {% for form in formset %}
        {{ form }}
    {% endfor %}
    <input type="button" value="Submit">
</form>
{% endblock %}

检查 html 后,我看到字段被呈现为hidden,我不知道为什么。

当我呈现此表单集时,即使数据库中有有效记录,我也没有看到为任何现有人员列出的任何子项。

相反,我想看到的是这个,假设一个人 X 有 3 个孩子 A、B、C,那么我想要 3 个下拉列表,第一个下拉列表应该选择 A 作为选择值,第二个应该选择 B 作为选择和很快。

我不确定我的做法是否正确,或者 inlineformsets 是否适用于这种特殊情况。

标签: django

解决方案


推荐阅读