2014-02-08 3 views
1

Когда я добавляю данные из своей формы и получаю эту ошибку. IntegrityError в/open_shop/ колонке слизняка не является уникальнымстолбчатый слизень не уникален

Но протестирован и пулями его уникальным

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 
+1

не 'f = OpenShopForm (self.request.POST)' полностью лишить строку 'f.submitter'? Если я правильно понимаю, податель - это слизняк, поэтому, если вы переопределяете эту строку, тогда slug не назначается – yuvi

+0

и использование 'request.POST' сохраняет фотографии ?? Это делает нулевой смысл, поскольку файлы передаются на 'request.FILES', а не' request.POST'. – yuvi

+0

тоже не сохраняет. Я застрял капитально ... – wadadaaa

ответ

2

Я понятия не имею, почему у вас есть эти две строки, начинающиеся if self.request.method == 'POST' в form_valid. Этот метод вызывается только в том случае, если форма действительна, что может произойти только в том случае, если она была создана из POST в первую очередь. Как отметил yuvi, внутри этого заявления вы заменяете существующую форму на новую, основанную на POST, перезаписывая то, что вы ранее делали, чтобы установить submitter.

+0

Эти поля добавлены, потому что они не сохраняли изображения из формы. Класс 'OpenShop (CreateView): модель = Магазин form_class = OpenShopForm Защиту form_vaalid (самостоятельная, форма): п = form.save (фиксации = False) f.submitter = self.request.user f.save() возвращение супер (CreateView, самость) .form_valid (форма) защиту get_success_url (Я): возвращение назад ("профиль", kwargs = { 'тихоход': self.request.user}) ' – wadadaaa

+0

@wadadaaa пожалуйста отредактируйте этот код в исходном сообщении, он нечитабелен, как этот – yuvi

1

Понятно, что я никогда не использовал представления на основе классов, и документы были довольно неоднозначными. но попробуйте:

def form_valid(self, form): 
    form.instance.submitter = self.request.user 
    return super(CreateView, self).form_valid(form) 
+0

''Объект AddproductForm' не вызываем' – wadadaaa

+0

попробуйте полностью удалить первую строку. – yuvi

+0

'IntegrityError at/addproduct/ products_product.submitter_id не может быть NULL' – wadadaaa

1

Это работает!

class AddProduct(CreateView): 
     model = Product 
     form_class = AddproductForm 

     def form_valid(self, form): 
      form.instance.submitter = self.request.user 
      return super(AddProduct, self).form_valid(form) 
     def get_success_url(self): 
      return reverse("profile", kwargs={'slug': self.request.user}) 
+0

Итак, по сути, это то же самое, что и мой ответ – yuvi

 Смежные вопросы

  • Нет связанных вопросов^_^