首页 > 解决方案 > 带有外键查找的 Django 模板表单集

问题描述

希望对我在表单集中的模板中显示反向查找字段的以下问题提供一些指导。

维修项目型号

class Maintenance_Item(CommonInfo):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, unique=True)
    name_description = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.name

清单模型

class MaintenanceCheckList(CommonInfo):
    CHOICES = (
        ('P','Compliant'),
        ('F','Non-Compliant'),
    )

    id = models.AutoField(primary_key=True)
    item = models.ForeignKey(Maintenance_Item, on_delete=PROTECT, related_name='item_name')
    is_compliant = models.CharField(max_length=20, choices= CHOICES, default=CHOICES[0][0])

    def __int__(self):
        return self.item

编辑表格

class MaintenanceCheckListComplianceForm(forms.ModelForm):
    is_compliant = forms.ChoiceField(
        choices=MaintenanceCheckList.CHOICES,
        widget=forms.RadioSelect,
        required=False,
    )

    class Meta:
        model = MaintenanceCheckList
        fields = ('item','is_compliant',)

END EDIT 当前模板

<form class="" method='post'>
      {% csrf_token %}
      {{ form.management_form }}
      <table class="table my-0" id="dataTable">
        <thead>
            <tr>
                <th>Maintenance Items</th>
            </tr>
        </thead>
        <tbody>
          {% for sub_form in form %}
          <tr>
            {% for i in sub_form.item_name.all %}
              <td>Item: {{ i.name }}</p>
              {% endfor %}
                {{ sub_form.item|add_class:"form-select" }}<p>
              </p>{{ sub_form.is_compliant }}</td>
          </tr>
        {% endfor %}
        </table>   
        <div class="divider"></div>
        <div class="col-md-12">
        <p class='pt-sm-2'>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>

目前,我有通用的表单集视图,它为 Maintenance_Item 中的每个项目创建一行,它工作得很好,并生成了如图所示的表单集视图。 维修项目表格

我面临的挑战是我想隐藏 ModelChoice 字段(我可以使用 Widget 轻松做到这一点),并且只需将 ModelChoice 字段中的友好名称显示为模板中的简单文本标签。

注意设置禁用将不起作用,因为 POST 忽略禁用的字段(已使用该字段进行故障排除)

标签: pythondjangodjango-templates

解决方案


推荐阅读