最后编辑:我解决了。看评论。
我想创建一个项目对象,并通过我编写的表单将其保存到数据库中。现在,我可以从表单中更新它,而且管理面板也可以从那里创建项目。但是,创建表单不保存。当我单击按钮时,它刷新页面,在终端返回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 %}
答案 0 :(得分:0)
显然我忘记了模板中的enctype =“ multipart / form-data”。问题解决了。