Многие-многие поля не редактируются в модельной форме - PullRequest
0 голосов
/ 21 января 2019

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

...