2017-01-18 30 views
0

投稿のタイトルが正しいかどうかわかりません。私は何をしたいのかを説明し、何が最善の方法かを教えてくれるでしょう。外部キーとしてuuidを使用するDjangoのレストフレームワークを持つDjangoのモデルのキー

Userモデルのフィールドに「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)たぶん

誰かが私を助けることができます。

答えて

1

あなたは

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') 
+0

甘いを試すことができます。ありがとう!それが動作するかどうかは分かりませんでした。 –

関連する問題