我正在使用 django rest 框架構建一個聊天應用程式,我目前正在處理訊息。這是我的模型:
from django.db import models
from django.contrib.auth.models import User
class Message(models.Model):
text = models.CharField(max_length=500)
datetime = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE);
我正在使用 Django 身份驗證用戶模型。這是我用于訊息的 ModelViewSet:
class MessageViewSet(ModelViewSet):
queryset = Message.objects.all()
serializer_class = MessageSerializer
這些是我的序列化程式:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username']
class MessageSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Message
fields = '__all__'
這是我的 API:

到目前為止,我撰寫的代碼非常適合我想要的 GET 功能。我希望每條訊息都能獲得它所屬用戶的用戶名。但是現在我想要以下內容:當我發布一條新訊息時,我希望能夠通過指定用戶的 id 來指定它屬于哪個用戶。現在我在 POST 部分只有“文本”欄位。我需要添加一個“用戶”欄位,它接受一個整數(用戶主鍵)來指定訊息屬于哪個用戶。我應該如何重構我的代碼才能做到這一點?
uj5u.com熱心網友回復:
由于您已覆寫該user欄位并將其設定為read_only=True,因此在創建/更新模型時無法設定用戶。
如果您只需要用戶的用戶名,我建議您直接添加一個username欄位MessageSerializer:
class MessageSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username', read_only=True)
class Meta:
model = Message
fields = '__all__'
現在您將獲得此有效負載:
{
"id": 1,
"user": 1,
"username": "timi",
...
您現在應該可以設定用戶 ID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/361110.html
上一篇:Django-多對多關系的經理
