Встроенные формы Django обновляют модель - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь заставить работать наборы форм Django при обновлении модели.

У меня есть 2 модели, Product и ProductSize. Я использую встроенный набор форм, чтобы связать мои ProductSize с Product с при добавлении или редактировании Product. Добавление объекта - это нормально, но когда я пытаюсь редактировать Product, я не могу отправить форму. Я получаю [{'id': ['This field is required.']}] вывод в print ниже.

Вот мои взгляды:

class ProductAdd(AddModelView):
    model = Product
    form_class = UpdateProductForm
    template_name = 'intake_goods_form.jinja'
    title = 'Add Product Type'
    formset_class = ProductSizesFormSet

    def form_valid(self, form):
        obj = form.save()
        formset = self.formset_class(self.request.POST)
        if formset.is_valid():
            formset.instance = obj
            formset.save()
        else:
            print(formset.errors)
            return self.form_invalid(form)
        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        if self.request.POST:
            formset = self.formset_class(self.request.POST, instance=self.object)
        else:
            formset = self.formset_class(instance=self.object)
        return super().get_context_data(formsets=formset, **kwargs)


product_type_add = ProductAdd.as_view()


class ProductEdit(ProductAdd, UpdateModelView):
    model = Product
    form_class = UpdateProductForm


product_type_edit = ProductEdit.as_view()

А вот мои формы:

class UpdateProductForm(SVModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    class Meta:
        model = Product
        exclude = {'material'}


class ProductSizeForm(SVModelForm):
    title = 'Product Type Sizes'

    class Meta:
        model = ProductSize
        fields = ['sku_code', 'bar_code', 'size']


ProductSizesFormSet = forms.inlineformset_factory(Product, ProductSize, ProductSizeForm, extra=1, can_delete=False)

Может кто-нибудь помочь?

Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018

Хорошо, так что я нашел решение, и было бы невозможно понять из моего опубликованного вопроса, извините.

В шаблоне я только просматривал видимые поля формы. Поэтому, конечно, ID не был включен.

При необходимости обязательно включите в шаблон поле formset.id.

...