Django已经有一个User模型,其中有一个用户名字段;我还有一个 Profile 模型。 我想要实现的是将用户模型中的用户名以及配置文件模型的字段一起发送,以便我可以从配置文件模型本身访问用户名,至于前端我返回配置文件模型的对象
型号
User= get_user_model()
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
id_user = models.IntegerField()
department= models.CharField(max_length=50,blank=True)
degree= models.CharField(max_length=20,blank=True)
year= models.CharField(max_length=20,blank=True)
bio = models.TextField(blank=True)
profileimg= models.TextField(default=DEFAULT_IMAGE_DATA)
def __str__(self):
return self.user.username
序列化器
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields=['id','user', 'id_user', 'department', 'degree', 'year', 'bio','profileimg']
class ChatMsgSerializer(serializers.ModelSerializer):
reciever_profile= ProfileSerializer(read_only=True)
sender_profile= ProfileSerializer(read_only=True)
class Meta:
model = ChatMsg
fields=['id','user', 'sender','sender_profile', 'reciever','reciever_profile', 'msg', 'is_read', 'date']
我的一个解决方案是从前端发出另一个获取请求,并再创建一个返回用户名的端点,但是当我需要发送者和接收者用户名时,它会很好地工作
SlugRelatedField
[drf-doc]:
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(slug_field='username', read_only=True)
class Meta:
model = Profile
fields = [
'id',
'user',
'id_user',
'department',
'degree',
'year',
'bio',
'profileimg',
]