gpt4 book ai didi

python - 在带有 Django Rest Framework 的 Django 模型中使用 uuid 作为外键

转载 作者:行者123 更新时间:2023-11-29 12:09:55 24 4
gpt4 key购买 nike

不知道这个帖子的标题对不对。我会解释我想做什么,你可以告诉我什么是最好的方法。

我想在我的用户模型中有一个“id”(Int)作为主键和一个“uuid”(uuid)作为字段。所以,我想用“id”链接表,因为它更快,但我希望前端只看到“uuid”而不是“id”,因为这样更安全。

我的问题是我有一个“消息”模型。看起来是这样的:

class Message(models.Model):
created = models.DateTimeField(auto_now_add=True)

type = models.CharField(_('type'), choices=MESSAGE_TYPE, default='Invitation', max_length=100)
content = models.TextField(_('content'), blank=False)
sender = models.ForeignKey(User, related_name='sender_message', verbose_name=_("Sender"), )
recipient = models.ForeignKey(User, related_name='receiver_message', null=True, blank=True,
verbose_name=_("Recipient"))
url_profile_image = models.URLField(_('url_profile_image'), max_length=500, blank=True, default='')

class Meta:
ordering = ('created',)

如您所见,“发件人”和“收件人”通过 ForeignKey 链接到我的用户。但是 ForeignKey 作为用户 ID 返回。

  {
"url": "http://127.0.0.1:8000/users/messages/4/",
"id": 4,
"type": "invitation_accepted",
"content": "Sure",
"sender": 4,
"recipient": 1,
"url_profile_image": ""
}

4 是“发件人”的 ID,1 是“收件人”的 ID。但我希望前端只看到发件人的“uuid”和收件人的“uuid”。

我的序列化器看起来是这样的:

class MessageSerializer(serializers.ModelSerializer):

class Meta:
model = Message
fields = ('url', 'id', 'type', 'content', 'sender', 'recipient', 'url_profile_image')

所以,我想也许有两种方法可以做我想做的事。

要么将 uuid 用作外键,要么在序列化程序中执行某些操作并获取用户的 uuid 并将其返回到“发件人”和“收件人”中。

我的观点很简单:

class MessageViewSet(viewsets.ModelViewSet):
queryset = Message.objects.all()
serializer_class = MessageSerializer

(不用担心查询集,它看起来很疯狂,但确实如此 :) 那种消息不是私有(private)的 :D )

也许有人可以帮助我。

最佳答案

你可以试试

class MessageSerializer(serializers.ModelSerializer): 
sender = serializers.ReadOnlyField(source='sender.uid')
recipient = serializers.ReadOnlyField(source='recipient.uid')

class Meta:
model = Message
fields = ('url', 'id', 'type', 'content', 'sender', 'recipient', 'url_profile_image')

关于python - 在带有 Django Rest Framework 的 Django 模型中使用 uuid 作为外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728905/

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