Python 如何使用;与预取相关的“;要在DRF序列化程序中获取多对多字段?

Python 如何使用;与预取相关的“;要在DRF序列化程序中获取多对多字段?,python,django,django-models,django-rest-framework,django-views,Python,Django,Django Models,Django Rest Framework,Django Views,在下面的代码中,我需要badge\u颜色并且badge\u文本应该显示在user\u detail方法下 Models.py class User(AbstractBaseUser, PermissionsMixin): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) user_name = models.CharField(max_lengt

在下面的代码中,我需要
badge\u颜色
并且
badge\u文本
应该显示在
user\u detail
方法下

Models.py

class User(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    user_name = models.CharField(max_length=50, unique=True)
    user_badges = models.ManyToManyField(Badges,related_name='badges', null=True,blank=True,)

class Badges(models.Model):
    badge_text  = models.CharField(max_length=50)
    badge_color = models.CharField(max_length=50)


class Comments(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, max_length=50, unique=False)
    date = models.DateTimeField("date of comment", default=timezone.now)
    comment_text = models.CharField(max_length=2500)
注释类的序列化程序

class CommentsSerializer(serializers.ModelSerializer):
    user_detail = serializers.SerializerMethodField()
    class Meta:
        model = Comments
        fields =[date,comment_text,user_detail]
    
    def get_user_detail(self, obj):
        if obj.user:
           return {
                "id": obj.user.id,
                "user_name": obj.user.user_name,
                "profile_pic": profile_pic,
            }
        else:
            return None
Views.py

..........
.............
qs=Comments.objects.all()
comments=CommentsSerializer(qs, many=True)

您可以执行以下操作:

class BadgeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Badges
        fields =[badge_color, badge_text]

class CommentsSerializer(serializers.ModelSerializer):
    user_detail = serializers.SerializerMethodField()
    class Meta:
        model = Comments
        fields =[date,comment_text,user_detail]
    
    def get_user_detail(self, obj):
        if obj.user:
           badges = BadgeSerializer(source='obj.user.user_badges', many=True)
           return {
                "id": obj.user.id,
                "user_name": obj.user.user_name,
                "profile_pic": profile_pic,
                "user_badges": badges.data
                
            }
        else:
            return None

仍然不能只使用空白数据库,我错过了您在
评论
上这样做的机会。我已经更新了我的答案,更改了源代码,检查了它。BadgeSerializer中不需要模型??很抱歉我错过了,答案更新仍然得到空值没有运气:((