繁体   English   中英

Django CreateView 不保存 object 并且不给出错误

[英]Django CreateView doesn't save object and doesn't give error

我正在开发一个新项目,但在从用户页面添加新对象时遇到了困难。 它可以从管理仪表板添加。 这是 model:

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() 中。 他们都没有工作。 所以我可以打开表格并填写字段。 当我发送它时,object 没有保存,但它没有给出任何错误。 它只是重新加载表单。

您正在评论#form.save()

您必须取消注释才能保存。

好的,所以经过近一周的尝试解决问题并且没有太多帮助,我找到了解决方案! form_valid()可以正常工作,但问题出在形式上。 添加enctype解决了这个问题:

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

我为此找到的解释是,如果没有enctype ,图像数据就没有正确传递到数据库。 所以看起来表格很好,但在背景上它没有保存图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM