鱼C论坛

 找回密码
 立即注册
查看: 1894|回复: 0

DRF求助, 模型表有外键添加数据出错

[复制链接]
发表于 2022-6-7 14:30:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我有个模型 , 其中 publish 及 author 都是外键。
  1. class BooksModels(models.Model):
  2.     titile = models.CharField(verbose_name='书名', max_length=32, unique=True)
  3.     price = models.FloatField(verbose_name='价格', blank=True)
  4.    
  5.     CATEGORY_CHOOSE = (
  6.         (1, '武侠小说'),
  7.         (2, '言情小说'),
  8.         (3, '修仙小说'),
  9.         (4, '都市小说'),
  10.     )
  11.     category = models.SmallIntegerField(verbose_name='类别', choices=CATEGORY_CHOOSE, default=1)
  12.    
  13.     publish = models.ForeignKey(to='Publish', related_name='publish_books', on_delete=models.CASCADE)
  14.     author = models.ForeignKey(to='Author', related_name='author_books', on_delete=models.CASCADE)
  15.    
  16.     class Meta:
  17.         db_table = 'Books'
复制代码



另外还有一个 序列化器; 如果 没有自定义字段时, fields = '__all__'
  1. class BookSerializerEg(serializers.ModelSerializer):
  2.     #author_name = serializers.SerializerMethodField("get_author")
  3.     #publish_name = serializers.SerializerMethodField("get_publish")
  4.     def get_author(self, obj):
  5.         return obj.author.name
  6.    
  7.     def get_publish(self, obj):
  8.         return obj.publish.name
  9.    
  10.     class Meta:
  11.         model = models.BooksModels
  12.         fields = '__all__'
  13.         #fields = ['id', 'titile', 'price', 'category', 'author_name', 'publish_name']
复制代码





通过post 方法 能成功 插入数据  
插入的 json 为 {   
                "id":5,
                "titile": "3小李飞刀",
                "price": 78,
                "category": 1,
                "publish": 1,
                "author": 1
        }



#  ****************************************



如果我的序列化器 添加上自定义字段时, 再插入数据,它就会死活报错,
  1. class BookSerializerEg(serializers.ModelSerializer):
  2.     author_name = serializers.SerializerMethodField("get_author")
  3.     publish_name = serializers.SerializerMethodField("get_publish")
  4.     def get_author(self, obj):
  5.         return obj.author.name
  6.    
  7.     def get_publish(self, obj):
  8.         return obj.publish.name
  9.    
  10.     class Meta:
  11.         model = models.BooksModels
  12.         #fields = '__all__'
  13.         fields = ['id', 'titile', 'price', 'category', 'author_name', 'publish_name']
复制代码






报错信息如下:
IntegrityError at /api/v1/books/
NOT NULL constraint failed: Books.author_id

求解,在百度搜索了好久,也没有得到正解~~






小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表