【发布时间】:2014-03-05 22:53:48
【问题描述】:
当我从表单添加数据并收到此错误时。 /open_shop/ 处的 IntegrityError 柱塞不是唯一的
但经过测试并独树一帜
class OpenShopForm(forms.ModelForm):
class Meta:
model = Shop
class OpenShop(CreateView):
model = Shop
form_class = OpenShopForm
def form_valid(self, form):
f = form.save(commit=False)
f.submitter = self.request.user
if self.request.method == 'POST':
f = OpenShopForm(self.request.POST)
f.save()
return super(CreateView, self).form_valid(form)
def get_success_url(self):
return reverse("profile", kwargs={'slug': self.request.user})
如果我通过管理员添加相同的,它可以正常工作
此代码不保存图片:
class OpenShop(CreateView):
model = Shop
form_class = OpenShopForm
def form_valid(self, form):
f = form.save(commit=False)
f.submitter = self.request.user
f.save()
return super(CreateView, self).form_valid(form)
def get_success_url(self):
return reverse("profile", kwargs={'slug': self.request.user})
{% extends "base.html"%}
{% block content %}
<form enctype="multipart/form-data" action="{% url 'addproduct' %}" method="post">{% csrf_token %}
{{ form.non_field_errors }}
<p>
{{form.title.errors}}
<label class="txtField" for="id_subject">Product name:</label>
{{ form.title }}
</p>
<p>
{{form.slug.errors}}
<label class="txtField" for="id_subject">Slug:</label>
{{ form.slug }}
</p>
<p>
{{form.catalog.errors}}
<label class="txtField" for="id_subject">Product catalog:</label>
{{ form.catalog }}
<p>
{{form.subcatalog.errors}}
<label class="txtField" for="id_subject">Product subcatalog:</label>
{{ form.categories }}
</p>
<p>
{{form.description.errors}}
<label class="txtField" for="id_subject">Product descriptions:</label>
{{ form.description }}
</p>
<p>
{{form.price.errors}}
<label class="txtField" for="id_subject">Product price:</label>
{{ form.price }}
</p>
<p>
{{form.sale_price.errors}}
<label class="txtField" for="id_subject">Product sale price:</label>
{{ form.sale_price }}
</p>
<p>
{{form.is_active.errors}}
<label class="txtField" for="id_subject">Product activity:</label>
{{ form.is_active }}
</p>
<p>
{{form.is_featured.errors}}
<label class="txtField" for="id_subject">Product featured:</label>
{{ form.is_featured }}
</p>
<p>
{{form.quantity.errors}}
<label class="txtField" for="id_subject">Product quantity:</label>
{{ form.quantity }}
</p>
<p>
{{form.shop.errors}}
<label class="txtField" for="id_subject">Product shop:</label>
{{ form.shop }}
</p>
<input type="submit" value="Submit" />
</form>
{% endblock %
}
models.py
class Product(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
image = models.ImageField(verbose_name=u'Image', upload_to="product_pic", blank=True)
catalog = models.ForeignKey(Catalog)
subcatalog = models.ManyToManyField(Subcatalog)
description = models.TextField(blank=True, help_text="Describe product")
submitter = models.ForeignKey(User, related_name="product vendor")
price = models.DecimalField(max_digits=15, decimal_places=2)
sale_price = models.DecimalField(max_digits=15, decimal_places=2)
is_active = models.BooleanField(default=True)
is_featured = models.BooleanField(default=False)
quantity = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
shop = models.ForeignKey(Shop)
def __unicode__(self):
return self.title
【问题讨论】:
-
f = OpenShopForm(self.request.POST)不会完全关闭f.submitter行吗?如果我理解正确,提交者就是 slug,所以如果你覆盖该行,那么不会分配 slug -
并使用
request.POST保存图片??这是零意义,因为文件被传输到request.FILES而不是request.POST。 -
也不保存。我坚持大写...
-
好吧,根据the docs,您不需要调用
save,它应该会自动调用。你能分享你的html表单吗?
标签: django python-2.7 django-forms slug