简而言之,是一个序列化器:
class ReleaseComponentContactSerializer(StrictSerializerMixin, serializers.ModelSerializer):
component = serializers.SlugRelatedField(source='release_component', slug_field='name',
queryset=ReleaseComponent.objects.all())
role = serializers.SlugRelatedField(source='contact_role', slug_field='name',
read_only=False, queryset=ContactRole.objects.all())
contact = ContactField()
def to_representation(self, instance):
...........................
# I hope return one dict or multiple dict, for first instance it return dict1, for second one it return dict2, dict3
return ..............
class Meta:
model = RoleContact
fields = ('id', 'component', 'role', contact)
我希望结果类似于dict1,dict2,dict3,NOT dict1,[dict2,dict3]。可能吗?我认为这就是我想要的。
最初的问题是我有三个模型,
class ReleaseComponent(models.Model):
.................
global_component = models.ForeignKey(GlobalComponent)
name = models.CharField(max_length=100)
contacts = models.ManyToManyField(Contact, through='contact.RoleContact', blank=True)
class RoleContact(models.Model):
contact_role = models.ForeignKey(ContactRole, related_name='role_contacts',
on_delete=models.PROTECT)
contact = models.ForeignKey(Contact, related_name='role_contacts',
on_delete=models.PROTECT)
global_component = models.ForeignKey('component.GlobalComponent', blank=True, null=True,
related_name='role_contacts')
release_component = models.ForeignKey('component.ReleaseComponent', blank=True, null=True,
related_name='role_contacts')
class GlobalComponent(models.Model):
"""Record generic component"""
.................................
contacts = models.ManyToManyField(Contact, through='contact.RoleContact', blank=True)
如果ReleaseComponent没有联系人,它将使用其GlobalComponent的联系人。因此,一个RoleContact对象可以连接到多个发布组件,因为一个RoleContact - >一个GlobalComponent - >多个ReleaseComponent。如果ReleaseComponent有联系人且此联系人不与GlobalComponent共享,则它必须是一个RoleContact - >一个ReleaseComponent。一般来说,使用pickching queryset,一个RoleContact - >一个或多个ReleaseComponent。
我希望输出格式一致。在输出中,每个项对应一个ReleaseComponent的一个RoleContact信息。即使对于多个ReleaseComponent对象的RoleContact对象也是如此。我可以在to_representation中生成多个dicts,但在最终输出中,这个多个dict将在列表中,如
[dict2, dict3, dict4]
是否可以在最终输出中将它们排除在列表之外?成为:
的一部分dict1, dict2,dict3,dict4, dict5,........?
感谢。
答案 0 :(得分:1)
您可以在调用serializer.data
后根据您的要求修改序列化数据,在视图中执行此操作。
您需要执行以下操作:
serialized_data = my_serializer.data # original serialized data
return_data = [] # final response which will be returned
for item in serialized_data:
if isinstance(item, list): # check if a list inside serialized data
return_data += item # add the elements of the list to 'return_data' list
else:
return_data.append(item) # Otherwise just append the item to 'return_data' list
return_data
包含最终所需的回复。