我正在尝试使用模型表单集(基于我的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)则不是。我希望这些内容是可编辑的。