![](/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.