Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django非空约束失败:shop\u product.user\u id_Python_Django_Django Models - Fatal编程技术网

Python Django非空约束失败:shop\u product.user\u id

Python Django非空约束失败:shop\u product.user\u id,python,django,django-models,Python,Django,Django Models,我是Django的新手,我试图通过一些项目的实践来学习,但我被这个问题困住了 非空约束失败:shop\u product.user\u id 型号.py from django.db import models from django.conf import settings from django.core.urlresolvers import reverse class Category(models.Model): user = models.ForeignKey(setting

我是Django的新手,我试图通过一些项目的实践来学习,但我被这个问题困住了

非空约束失败:shop\u product.user\u id

型号.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])
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')
这是我的views.py,但我不确定我的视图是否有问题,我认为问题将不得不与我的模型有关

视图.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])
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')

请告诉我可以做什么。

将用户添加到列表中:

class ProductCreate(CreateView):
    model = Product
    fields = ["category", 'name', 'image', 'description', 'price','stock','available', 'negiotiable', 'user']
或者确保字段必须为null=true且为空=true

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

为您的产品添加一个表单

class ProductForm(forms.ModelForm):

    class Meta:
        model = Product
        fields = "__all__"
此外,您的
user
字段必须是
null=True
blank=True

然后在create视图中

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)

现在,无论何时创建产品,创建产品的用户都将被添加为该产品的用户。

您是否有
商店
模型?您的产品创建视图不包括用户。发生这种情况时,您是否正在尝试创建产品?您能显示URL吗?我尝试过您的解决方案,但仍然不起作用,我仍然收到相同的错误消息。无论如何,谢谢当您更改字段时,您是否再次迁移了它?它起作用了,但现在我在/product/createNoEversematch处获得了noreversematch。好的,如果这起作用,请正确标记QUESSION,对于反向匹配错误,这可能会对您有所帮助