我不想让这两个都工作...我错过什么了吗我将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中的数据包含了默认值中包含的所有字段。
1条答案
按热度按时间jhiyze9q1#
不幸的是,似乎没有办法做到这一点,除了删除
unique_together
;约束检查在之前发生。另外,
myuser
的名称应该是user_related
(这是模型中作为外键的字段的名称)。否则,它会说像“X”这样的东西没有属性“Y”。一定是一模一样的。