![](/img/trans.png)
[英]How to use Django REST framework with a model with default value for foreign key?
[英]Use uuid as foreign Key in a model in Django with Django Rest Framework
不知道帖子標題對不對。 我會解釋我想要做什么,你可以告訴我什么是最好的方法。
我想在我的用戶模型中有一個“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
(不要擔心查詢集,它看起來很瘋狂,但確實如此:) 這種消息不是私密的: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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.