如何在 Django 中将字段及其数据从一个模型添加到另一个模型?

问题描述 投票:0回答:1

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']

我的一个解决方案是从前端发出另一个获取请求,并再创建一个返回用户名的端点,但是当我需要发送者和接收者用户名时,它会很好地工作

django django-models
1个回答
0
投票

您可以使用

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',
        ]
© www.soinside.com 2019 - 2024. All rights reserved.