表单不会保存,但会返回200

时间:2019-07-28 15:47:58

标签: python django python-3.x

最后编辑:我解决了。看评论。

我想创建一个项目对象,并通过我编写的表单将其保存到数据库中。现在,我可以从表单中更新它,而且管理面板也可以从那里创建项目。但是,创建表单不保存。当我单击按钮时,它刷新页面,在终端返回200,但不保存。我把它的每个部分都放了,我检查了很多,但没有看到任何错误。

编辑:我尝试了基于函数的视图,结果相同。但据我了解,问题在于图片。

这是我的模特。

class Item(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='items')
    name = models.CharField(max_length=50)
    description = models.TextField(max_length=250)
    price = models.FloatField()
    picture = models.ImageField(upload_to='item_pictures')
    is_available = models.BooleanField(default=True)
    created_at = models.DateField(auto_now_add=True)
    updated_at = models.DateField(auto_now=True)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, related_name='category')
    slug = models.SlugField(unique=True, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        return super(Item, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

我的网址

 path('item/create/', ItemCreateView.as_view(), name='item-create'),

我的观点

class ItemCreateView(LoginRequiredMixin, CreateView):
model = Item
fields = ['name', 'description', 'price', 'picture', 'is_available', 'category', 'slug' ]
template_name = 'item/item_update.html'
success_url = '/'

成功返回网址,但表单仅刷新

和形式

class ItemCreateForm(forms.ModelForm):
class Meta:
    model = Item
    fields = ['name', 'description', 'price', 'picture', 'is_available', 'category', 'slug']

最后以防万一的模板

    {% extends "base.html" %}


{% load crispy_forms_tags %}

{% block body %}
    <form action="{% url 'item-create' %}" method="POST" class="form-group">
    {% csrf_token %}
    <div class="row justify-content-center">
        <div class="col-6">
        {{ form|crispy }}
        <div class="col text-center">
            <button type="submit" class="btn btn-success">Create</button>
        </div>
        </div>
    </div>
    </form>
{% endblock %}

1 个答案:

答案 0 :(得分:0)

显然我忘记了模板中的enctype =“ multipart / form-data”。问题解决了。