gpt4 book ai didi

django rest框架更改主键以使用唯一字段

转载 作者:行者123 更新时间:2023-12-03 15:18:23 24 4
gpt4 key购买 nike

我有一个名为 GameProfile 的模型,这是与 User 的一对一关系模型。我用了HyperlinkedModelSerializer在我所有的设计中。

对于GameProfile ,用户字段被假设为查询的主键,它是唯一的,但我没有将它设置为主键。有没有办法将 django 序列化程序的默认行为更改为指向 user__id作为主键并始终使用它来检索详细 View 中的配置文件?

class GameProfileSerializer(serializers.HyperlinkedModelSerializer):
"""
"""
user_pk = serializers.Field(source='user.id')

class Meta:
model = GameProfile


class GameProfileViewSet(viewsets.ModelViewSet):
"""
"""
queryset = GameProfile.objects.all()
serializer_class = GameProfileSerializer

def get_queryset(self):
""" get_queryset
"""
queryset = super(GameProfileViewSet, self).get_queryset()
if not queryset.exists():
raise Http404
if self.request.user.is_authenticated() and not self.request.user.is_superuser:
return queryset.filter(user=self.request.user)
return queryset

请指教,提前谢谢:)

最佳答案

为了使 URL 正常工作,您可能需要添加 lookup_field在 ViewSet 上,而不仅仅是在序列化器上。所以你会有:

class GameProfileViewSet(viewsets.ModelViewSet):
queryset = GameProfile.objects.all()
serializer_class = GameProfileSerializer
lookup_field = 'user__id'

在这种情况下, lookup_field使用双下划线表示法而不是点表示法(点在 URL 模式的正则表达式中不起作用)。我无法得到 @almalki 提出的解决方案和 @patsweet去工作;根据 documentation在序列化程序上,“此选项的值 [ lookup_field] 应与 URL conf 中的 kwarg 和模型上的字段对应”,因此它可能不适用于 RelatedFields。

关于django rest框架更改主键以使用唯一字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22303389/

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