首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NULL约束失败: product_product.author_id

NULL约束失败: product_product.author_id
EN

Stack Overflow用户
提问于 2019-08-02 13:36:21
回答 2查看 2.2K关注 0票数 1

当我要在邮递员中发布对象时,我得到了这个错误。

NULL约束失败: product_product.author_id

我在“授权”部分中包含了Basic Auth,无论如何,它会给我带来错误。

models.py

代码语言:javascript
复制
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
brand = models.CharField(max_length=200)
rating = models.PositiveSmallIntegerField(default=0)
description = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)

serializers.py

代码语言:javascript
复制
class ProductSerializer(serializers.HyperlinkedModelSerializer):
category = serializers.SlugRelatedField(queryset=Category.objects.all(), slug_field='name')
author = serializers.ReadOnlyField(source='author.username')
class Meta:
    model = Product
    fields = ['id', 'url', 'category', 'name', 'brand', 'rating', 'description', 'price']

为什么不发生零约束呢?我怎么才能解决这个问题?提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2020-10-25 00:04:15

我认为您应该在models.create_all()中添加Models.py来创建数据库

票数 0
EN

Stack Overflow用户

发布于 2020-10-25 13:26:56

发生此错误的原因很简单,因为您的创建请求没有为产品的author属性提供值。

代码语言:javascript
复制
# models.py

class Product(models.Model):
    ....
    author = models.ForeignKey(User, on_delete=models.CASCADE)

所以要解决这个问题完全取决于你的业务逻辑,

  • 一个产品有一个作者重要吗?
代码语言:javascript
复制
- **[NO]** ==> then just make the foreign key `null=True, blank=True`
- **[YES]** ==> Then you need to modify your creation logic a lil bit.
  • 是产品的作者,也是创建它的作者?
代码语言:javascript
复制
- **[YES]**, then this can easily be done by overriding your serializer's create method
代码语言:javascript
复制
 ....     # Inside you serializer     def create(self, validated\_data):         validated\_data['author'] = self.context['request'].user         return super().create(validated\_data)
代码语言:javascript
复制
- **[NO]**, You have to make the serializer accept writes on `author` field.

一个小注释,您的ProductSerializer元类的字段属性,不包括'author',确保它也是在那里添加的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57327623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档