Django CreateView не сохраняет объект и не выдает ошибку

Я работаю над новым проектом и у меня возникли трудности с добавлением новых объектов со страницы пользователей. Они могут быть добавлены из панели администратора. Вот модель:

class Product(models.Model):
    title = models.CharField(max_length=150)
    price = models.IntegerField()
    image = models.ImageField(upload_to='products')
    description = models.TextField(max_length=500)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title
        
    def get_absolute_url(self):
        return reverse('product-details', kwargs={'pk': self.pk})

У меня такой вид:

class ProductCreateView(LoginRequiredMixin, CreateView):
    model = Product
    fields = ['title', 'image', 'description', 'price']

    def form_valid(self, form):
        form.instance.owner = self.request.user
        #form.save()
        return super().form_valid(form)

product_form.html:

{% extends "index/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Product</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Save</button>
            </div>
        </form>
    </div>
{% endblock content%}

Я пробовал несколько раз, и у меня ничего не получилось. Поэтому я искал решения и попробовал следующее:

instance = form.save(commit=False)
instance.owner = self.request.user
instance.save()
return super().form_valid(instance)

и это

self.object.owner = self.request.user
self.object = form.save()
return super(ProductCreateView, self).form_valid(form)

внутри form_valid(). Ни одна из них не сработала. Итак, я могу открыть форму и заполнить поля. Когда я отправляю ее, объект не сохраняется, но это не дает никакой ошибки. Просто перезагружается форма.

Вы комментируете #form.save().

Вы должны откомментировать его, чтобы он сохранился.

Ок, после почти недели попыток решить проблему и не очень большой помощи, я нашел решение! form_valid() работает нормально, но проблема в форме. Добавление enctype устраняет проблему:

<form method="POST" enctype="multipart/form-data">

Объяснение этому я нашел в том, что без enctype данные изображения не передаются правильно в базу данных. Поэтому кажется, что форма работает нормально, но на заднем плане она не сохраняет изображение.

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