2017-06-01 117 views
1

我是新来的Django,我试图通过一些项目实践学习,但我坚持这个问题,失败的Django NOT NULL约束:shop_product.user_id

NOT NULL约束失败:shop_product.user_id

models.py

from django.db import models 
from django.conf import settings 
from django.core.urlresolvers import reverse 
class Category(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
          related_name='category_created') 
    name = models.CharField(max_length=200, db_index=True) 
    slug = models.SlugField(max_length=200, db_index=True, unique=True) 

    class Meta: 
     ordering = ('name',) 
     verbose_name = 'category' 
     verbose_name_plural = 'categories' 

    def __str__(self): 
     return self.name 

class Product(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
          related_name='product_created') 
    category = models.ForeignKey(Category, related_name='products') 
    name = models.CharField(max_length=200, db_index=True) 
    slug = models.SlugField(max_length=200, db_index=True) 
    image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True) 
    description = models.TextField(blank=True) 
    price = models.DecimalField(max_digits=10, decimal_places=2) 
    stock = models.PositiveIntegerField() 
    available = models.BooleanField(default=True) 
    negiotiable = models.BooleanField(default=True) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    users_like = models.ManyToManyField(settings.AUTH_USER_MODEL, 
             related_name='product_liked', 
             blank=True) 

    class Meta: 
     ordering = ('name',) 
     index_together = (('id', 'slug'),) 

    def __str__(self): 
     return self.name 
    def get_absolute_url(self): 
     return reverse('products_detail', 
         args=[self.slug]) 

这里是我的views.py但我不知道是否有问题我的意见,我认为这个问题将不得不与我的模型....

views.py

from django.views.generic import * 
from django.core.urlresolvers import reverse_lazy 
from .models import Category, Product 

class CategoryList(ListView): 
    model = Category 

class CategoryDetail(DetailView): 
    model = Category 

class ProductList(ListView): 
    model = Product 

class ProductDetail(DetailView): 
    model = Product 

class ProductCreate(CreateView): 
    model = Product 
    fields = ("category", 'name', 'image', 'description', 'price', 'stock','available', 'negiotiable') 

class ProductUpdate(UpdateView): 
    model = Product 
    fields = ('name', 'image', 'description', 'price', 'stock','available', 'negiotiable') 

class ProductDelete(DeleteView): 
    model = Product 
    success_url = reverse_lazy('product_list') 

请让我知道什么可以做。

+0

你有“商店”模型吗? – doru

+0

您的产品创建视图不包括用户。发生这种情况时您是否试图创建产品? – Brobin

+0

你可以显示网址吗? – zaidfazil

回答

2

要么添加用户到列表:

class ProductCreate(CreateView): 
    model = Product 
    fields = ["category", 'name', 'image', 'description', 'price','stock','available', 'negiotiable', 'user'] 

,或者确保字段必须是空=真和空白=真。

class Product(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
         related_name='product_created', null=True, blank=True) 
+0

我试过你的解决方案仍然无法正常工作,而且m仍然收到相同的错误信息。无论如何,谢谢 –

+0

当你改变你的领域时,你是否再次迁移它? – Sagar

+0

它的工作,但现在我得到noreversematch在/产品/创建 –

0

添加形式为您的产品,

class ProductForm(forms.ModelForm): 

    class Meta: 
     model = Product 
     fields = "__all__" 

此外,您user字段必须null=Trueblank=True

在创建视图

然后,

class ProductCreate(CreateView): 
    model = Product 
    form_class = ProductForm 

    def form_valid(self, form): 
     form.instance.user = self.request.user 
     form.save() 
     return super(ProductCreate, self).form_valid(form) 

现在,每当创建一个产品,谁创建的用户将被添加为产品的用户。

相关问题