Django UpdateView не сохраняет изменения в БД

В моем приложении я пытаюсь обновить объект с помощью Class Based View UpdateView и сохранить его в базе данных. Вот мой код:

models.py:

class Toy(models.Model):
    #Relation
    list = models.ForeignKey(GiftingList, on_delete=models.DO_NOTHING) 
    donor = models.ForeignKey("auth.User", on_delete=models.DO_NOTHING)
    
    #Attribute
    name = models.CharField(max_length=30, blank=False, help_text="Spielzeugnamen eingeben")
    description = models.TextField(max_length=200, blank=False, default="", help_text="Spielzeug  eingeben")
    image = models.ImageField(upload_to="upload/images/", blank=False, help_text="Bild hochladen")

    def __str__(self):
        return self.name

urls.py:

app_name = 'toys'

urlpatterns = [
    ...
    path("toys/<int:pk>/update/", ToyUpdateView.as_view(), name="ToyUpdate"),   
    ...
]

views.py:


class FormSubmittedInContextMixin(FormMixin):
    def form_invalid(self, form):
        return self.render_to_response(self.get_context_data(form=form, form_submitted=True))

class ToyUpdateView(UpdateView, FormSubmittedInContextMixin):
    model = Toy
    form_class = ToyForm
    template_name = "main/updatetoy.html"
    success_url = reverse_lazy('toys:GiftingListOverview')

forms.py:

class ToyForm(forms.ModelForm):
    class Meta:
        model = Toy

        widgets = {
            #'list': forms.ModelChoiceField(queryset=GiftingList.objects.label(), required=True),
            'list': forms.TextInput(attrs={'class': 'form-control'}),
            'donor': forms.TextInput(attrs={'class': 'form-control'}),
            'name': forms.TextInput(attrs={'class': 'form-control'}),
            'description': forms.TextInput(attrs={'class': 'form-control'}),
            'image': forms.TextInput(attrs={'class': 'form-control'}),
        }

        fields = ('list', 'donor', 'name', 'description', 'image')

HTML Шаблон:

{% extends "main/base.html" %}

{% block title %}Spielzeug bearbeiten{% endblock %}

{% block content %}
    <div class="container">
        <h3>Spielzeug {{ toy.name }} bearbeiten</h3>
        <form action="{% url 'toys:ToyUpdate' toy.id %}" method="post" enctype='multipart/form-data'>
            {% csrf_token %}
            {% include 'main/toy_form.html' %}
            <a href="{% url 'toys:ToyDetail' toy.id %}" class="btn btn-primary">Zurück<a>
            <button type="submit" class="btn btn-success">Speichern</button> 
        </form>

        
    </div>
{% endblock %}

toy_form.html:

<section class="django-forms">
    <div class="form-group">
        <b>Liste:</b>
        {{ form.list }}
        <div class="invalid-feedback">
            {{ form.label.errors }}
        </div>
    </div>
    <div class="form-group">
        <b>Author:</b>
        {{ form.donor }}        
        <div class="invalid-feedback">
            {{ form.user.errors }}
        </div>
    </div>
    <div class="form-group">
        <b>Name:</b>
        {{ form.name }}
        <div class="invalid-feedback">
            {{ form.details.errors }}
        </div>
    </div>
    <div class="form-group">
        <b>Beschreibung:</b>
        {{ form.description }}
        <div class="invalid-feedback">
            {{ form.label.errors }}
        </div>
    </div>
    <div class="form-group">
        <b>Image:</b>
        {{ form.image }}
        <div class="invalid-feedback">
            {{ form.label.errors }}
        </div>
    </div>
</section>

Когда я меняю заголовок в форме, он тут же меняет и заголовок тега, но не перенаправляет меня, что он должен делать, если валидация прошла успешно. Также, когда я вручную возвращаюсь к обзору, изменения не сохраняются.

У меня есть другой класс, в котором этот сценарий работает, как ожидалось. Я не могу понять, почему он не работает с этим классом. 

Терминал не показывает ошибку. HTML-код равен 200. Когда я обновляю и сохраняю этот другой функционирующий класс, он показывает код 302. Есть ли у вас какие-нибудь идеи?

Проблема была в виджете 'image' в forms.py. Я просто удалил его и позволил наследоваться от класса. Теперь можно сохранять изменения.

Вернуться на верх