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中不需要模型??很抱歉我错过了,答案更新仍然得到空值没有运气:((