gpt4 book ai didi

django-rest-framework - Django Rest Framework - 无法使用现有 FK 引用创建对象

转载 作者:行者123 更新时间:2023-12-04 08:24:32 25 4
gpt4 key购买 nike

我在 DRF 中有一个序列化器类,如下所示:

class ProjectSerializer(serializers.HyperlinkedModelSerializer):
created_by = UserSerializer() # created_by is an FK to User model

class Meta:
model = Project
fields = ('id', 'title', 'created_by')

我的观点:

class ProjectList(generics.ListCreateAPIView):
model = Project
serializer_class = ProjectSerializer
filter_fields = ('title',)

def post(self, request, format=None):
serializer = ProjectSerializer(data={
"id": 12,
"title": "FooBar's Project",
"created_by": {
"id": 1,
"username": "foobar",
"first_name": "foo",
"last_name": "bar",
},
})

if serializer.is_valid():
serializer.save()
else:
print serializer.errors
return Response(serializer.data, status=status.HTTP_201_CREATED)

这几乎按预期工作,除了 DRF 提示:

{'created_by': [{'username': [u'User with this Username already exists.']}]}

我想要的是项目是引用现有用户创建的。我在这里做错了什么?

注意:我正在跟踪 DRF 的行李箱,而不是从奶酪店。

最佳答案

如果你想分配一个现有的用户,而不是创建一个,嵌套的序列化器不是这种方式。由于您只想添加与用户的关系,因此您需要查看关系。

PrimaryKeyRelatedField 是可行的方法,因为该字段将是可写的,您还需要传递一个 queryset 属性。

created_by = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

查看文档以检查可以传递给该字段的附加选项:

http://django-rest-framework.org/api-guide/relations#primarykeyrelatedfield

那么您的示例帖子可能如下所示:

def post(self, request, format=None):
user = User.objects.get(pk=8)
serializer = ProjectSerializer(data={
"id": 12,
"title": "FooBar's Project",
"created_by": user.pk,
})

关于django-rest-framework - Django Rest Framework - 无法使用现有 FK 引用创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com