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() # tried this too and it didn't work
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_valid()可以正常工作,但问题在于形式。添加enctype可以修复问题:

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

我发现的解释是,如果没有enctype,图像数据将无法正确传递到数据库。所以它看起来形式很好,但在背景上它并没有保存图像。

相关内容

最新更新