Django UpdateWithInlinesView не сохраняет удаленные строки - PullRequest
0 голосов
/ 14 марта 2020

Я использую плагин jQuery (от elo80ka) для добавления и удаления строк из шаблона. У меня проблема в том, что когда я добавляю новые данные, все идет хорошо, и данные сохраняются. Но как только я пытаюсь удалить существующие, я получаю перенаправление без удаленных объектов. (как только я нажимаю удалить, встроенный удаляется, я проверял через инспектор)

class PlaceUpdateInline(InlineFormSetFactory):
    model = AdditionalLoadingPlace
    form_class = AdditionalLoadingPlaceInlineFormSet
    factory_kwargs = {'extra': 0, 'max_num': 5,
                    'can_order': False, 'can_delete': True}

class PlaceUpdateView(LoginRequiredMixin, UpdateWithInlinesView):
    model = Place
    form_class = PlaceCreateForm
    inlines = [PlaceUpdateInline]

    def forms_valid(self, form, inlines):
        form.instance.author = self.request.user
        self.object = form.save(commit=False)
        self.object.author = self.request.user
        form.save(commit=True)

        for inline in inlines:
            objects = inline.save(commit=False)
            for obj in inline.deleted_objects:
                # never called
                obj.delete()
            for object in objects:
                if object.place:
                    object.save()
        return HttpResponseRedirect(self.get_success_url())

РЕДАКТИРОВАТЬ:

Итак, мой шаблон имеет этот пользовательский рендеринг каждого поля:

{{ inlines.0.management_form }}
{{ inlines.0.non_form_errors }}
{% for form in inlines.0 %}
    <div class="inline {{ inlines.0.prefix }}">
        {{ form.hidden_field.as_hidden }} 
        {{ form.place.errors }}
        {{ form.place }}
        {{ form.id }}
    </div>
{% endfor %}

Но удаление работает, если я делаю это так:

{{ inlines.0.management_form }}
{{ inlines.0.non_form_errors }}
{% for form in inlines.0 %}
    <div class="inline {{ inlines.0.prefix }}">
        {{ form.as_p }}
    </div>
{% endfor %}

Кажется, есть проблема с моими скрытыми полями (которые я обновляю с помощью jQuery позже, и я не ' не хочу показывать это пользователям)

1 Ответ

0 голосов
/ 14 марта 2020

В любом случае, мне кажется, что я что-то упустил в своем шаблоне, и он не правильно рендерится (наверное) В итоге я сделал следующее:

{% for field in form.hidden_fields %}
    {{ field }}
{% endfor %}

{% for field in form.visible_fields %}
    {{ field }}
{% endfor %}

И также мои поля были скрыты от форм:

class PlaceInlineFormSet(ModelForm):

    class Meta:
        model = AdditionalLoadingPlace
        fields = ('hidden_field', 'place')

        widgets = {
            'place' : forms.TextInput(),
            'hidden_field': forms.HiddenInput(),
        }
...