Я пытаюсь создать редактируемую таблицу с набором форм модели (на основе моей модели 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