django 唯一并使用嵌套序列化程序发送null导致constranit错误

mnowg1ta  于 2023-05-19  发布在  Go
关注(0)|答案(1)|浏览(112)

我不想让这两个都工作...我错过什么了吗我将Json发送到我的帖子(创建评论):

{
"content":"message",
"myuser":{
    "username":"ztestz",
    "source":"test",
    "email":null}
}

以下哪一项对应于此模型的unique_together字段:

class MyUser(models.Model):
    username = CharField(max_length=50, null=True, blank=True)
    source = CharField(max_length=50, default='discord')
    email = EmailField(null=True, blank=True)

    class Meta:
        unique_together = (('username', 'source',),('email', 'source',))

我的嵌套序列化程序包含给定的create:

class CommentSerializer(serializers.HyperlinkedModelSerializer):
    myuser = MyUserSerializer()

    def create(self, validated_data):
        myuser_data = validated_data.pop('myuser')
        print(validated_data)
        # myuser = MyUser.objects.filter(
        #     Q(name=validated_data['username'], source=validated_data['source']) | Q(name=validated_data['email'], source=validated_data['source']))
        # print(myuser)
        myuser = MyUser.objects.get_or_create(**myuser_data)
        print(myuser)
        # myuser = MyUser.objects.get_or_create(myuser, defaults={'source': validated_data['source'], 'username': validated_data['username'], 'email': validated_data['email']})
        comment = Comment.objects.create(user_related=myuser[0], **validated_data)
        return comment

不知道为什么,get_or_create返回约束无效,即使item确实存在:

{
"myuser": {
    "non_field_errors": [
        "The fields username, source must make a unique set."
    ]
}
}

有谁能解释一下,这里发生了什么?嵌套序列化器是否需要使用unique_together或get_or_create来包含某些数据?**validated_data中的数据包含了默认值中包含的所有字段。

jhiyze9q

jhiyze9q1#

不幸的是,似乎没有办法做到这一点,除了删除unique_together;约束检查在之前发生。
另外,myuser的名称应该是user_related(这是模型中作为外键的字段的名称)。否则,它会说像“X”这样的东西没有属性“Y”。一定是一模一样的。

相关问题