我有 3 个不同的序列化程序,用于 3 个不同的父对象和子对象 View 。 View 是 CreateAPIView
、ListAPIView
、RetrieveAPIView
。
所以我的 CreateAPIView
有一个用于创建对象的序列化器,ListAPIView
有一个用于列出对象的序列化器,而 RetrieveAPIView
有一个用于显示对象的详细信息。对于子对象和父对象都是如此。
如何列出父对象中与其相关的所有子对象?
这意味着在父级的 RetrieveAPIView
中,我想显示其子级的 ListAPIView
。
模型:
class Boards(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=False, null=False, unique=True)
slug = models.SlugField()
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Boards, self).save(*args, **kwargs)
class Lists(models.Model):
name = models.CharField(max_length=50, blank=False, null=False, unique=True)
slug = models.SlugField()
board = models.ForeignKey(Boards, on_delete=models.CASCADE)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Lists, self).save(*args, **kwargs)
序列化器:
class BoardCreateSerializer(ModelSerializer):
# user = request.user
class Meta:
model = Boards
fields = ['name']
class BoardListSerializer(ModelSerializer):
url = HyperlinkedIdentityField(
view_name = 'trello:board-detail',
lookup_field = 'slug',
)
user = SerializerMethodField()
class Meta:
model = Boards
fields = ['url', 'name', 'user']
def get_user(self, obj):
return str(obj.user.username)
class BoardDetailSerializer(ModelSerializer):
user = SerializerMethodField()
class Meta:
model = Boards
fields = ['id', 'name', 'user']
def get_user(self, obj):
return str(obj.user.username)
同样,我也有列表序列化程序。(boards- parent object, lists-children
)。
如何在 Boards
的详细 View 中显示与其相关的所有列表?
最佳答案
有多种方法可以做到这一点:
通过将此字段添加到
BoardDetailSerializer
来使用source
参数:class BoardDetailSerializer(ModelSerializer): user = SerializerMethodField() lists = ListSerializer( source='Lists_set', many=True ) class Meta: model = Boards fields = ['id', 'name', 'user', 'lists'] def get_user(self, obj): return str(obj.user.username)
您还可以像为用户一样使用
SerializerMethodField()
。在该方法中,您需要通过序列化程序传递列表并获取 json 格式的数据(假设您使用的是默认的 json 渲染器)
关于django-rest-framework - 如何在DRF中获取并显示父序列化器中的所有子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669062/