在模型表单集中不可编辑的多对多字段

时间:2019-01-21 11:16:34

标签: django django-forms django-templates

我正在尝试使用模型表单集(基于我的POM模型)创建一个可编辑表,该表单集具有链接到另一个模型(POMMeasurement)的多对多字段。我的问题是表格中正确显示了许多字段,但是它们处于不可编辑状态,即我无法将其作为表单集的一部分进行更新。

我已经做了很多研究,但我真的不确定自己做错了什么。我看了内联表单集,但似乎是在谈论我有很多对很多的外键。

我的模板如下:

{{ formset_pom.management_form }}

    {%  for form in formset_pom %}

        {{ form.id }}

        <tr>

                <td>{{ form.code }}</td>

                <td>{{ form.name }}</td>

                {% if form.instance.pk %}

                    {% for meas in form.instance.measurement.all %}

                        <td>{{ meas.measurement }}</td>

                    {% endfor %}

我的Modles.py看起来像这样:

class POMMeasurement(models.Model):
    size = models.ForeignKey(Size, blank=False, on_delete=models.PROTECT)
    measurement = models.DecimalField(max_digits=6, decimal_places=2, default=0.00, blank=False)


class POM(models.Model):
    measurement_chart = models.ForeignKey(MeasurementChart, blank=True, on_delete=models.PROTECT)
    name = models.CharField(max_length=100, blank=True)
    code = models.CharField(max_length=50, blank=True)
    measurement = models.ManyToManyField(POMMeasurement, blank=True)
    sort = models.IntegerField(blank=True, default=1)

最后,我的views.py看起来像这样:

def ProductMeasurementChart(request, pk):

    product = models.Product.objects.filter(pk=pk).first()
    measurement_chart = models.MeasurementChart.objects.filter(product=product).first()
    size_header = measurement_chart.size_header.size.all()

    POMFormSet = modelformset_factory(models.POM, fields=('code', 'name', 'measurement', 'sort'), extra=1)

    if request.method == "POST":
        formset_pom = POMFormSet(request.POST, request.FILES)
        print(formset_pom.errors)
        if formset_pom.is_valid():
            instances = formset_pom.save(commit=False)
            for instance in instances:
                instance.measurement_chart = measurement_chart
                instance.save()
            return redirect('ProductMeasurementChart', pk=product.pk)

    else:
        formset_pom = POMFormSet(queryset=models.POM.objects.filter(measurement_chart=measurement_chart))

    return render(request, 'plm/measurementchart_detail.html', {'formset_pom': formset_pom,'product': product,'size_header': size_header,})

附件是我在页面上看到的屏幕截图。您会看到POM和Description字段是可编辑的。但是其他大小字段(6、8、10、12、14)则不是。我希望这些内容是可编辑的。

formset_problem_example

0 个答案:

没有答案