Django已经有一个User模型,它有一个username字段;我也有一个Profile模型. 我想要实现的是发送用户模型的用户名以及Profile模型的字段,这样我就可以从Profile模型本身访问用户名,至于前端我返回的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',
        ]

Django相关问答推荐

批量删除多对多条目?

其中实际的数据库提取在DRF list()中完成

使用自定义模型注册后,Django无法登录

社工/社工简戈

如何在 Django REST Framework API 响应中使用多标签过滤器?

Django:创建一个动态侧边栏模板并在其他模板中使用它

设置 SECURE_HSTS_SECONDS 可以不可逆转地 destruct 您的网站?

Django REST Framework 图片上传

Playframework 和 Django

Django 在模型中存储用户图像

DeleteView 中的success_message 未显示

是否有 django 模板过滤器来显示百分比?

如何从 django 模板生成静态 html 文件?

Django 模板上的 URL 编码

如何访问 Django Rest Framework 上的自定义 HTTP 请求标头?

Django - 如何在其管理模块中访问模型的详细名称?

Django - 来自 QuerySet 的唯一列表

Django 应用程序中的版本号

Django 在 css 文件中使用背景图像的方法

想要在 Django 测试中禁用信号