Ami*_*tad 0 django django-rest-framework
我的models.py如下:
class Group(models.Model):
name = models.CharField(max_length=50, unique=True)
class Policy(models.Model):
name = models.CharField(max_length=50, unique=True)
source_group = models.ForeignKey(Group, related_name='source_group')
destination_group = models.ForeignKey(Group, related_name='destination_group')
Run Code Online (Sandbox Code Playgroud)
由于我有两个外键,指向同一个模型,我使用相关名称来避免冲突。
现在,当我尝试为组创建序列化程序以列出与其关联的所有策略时,我执行以下操作:
class PolicySerializer(serializers.ModelSerializers):
class Meta:
model = Policy
fields = "__all__"
class GroupSerializer(serializers.ModelSerializer):
policy = PolicySnippetSerializer(source ='source_group', many=True)
class Meta:
model = Group
fields = ['id', 'name', 'policy']
Run Code Online (Sandbox Code Playgroud)
但是,这只会给我一个 source_group 的策略。我是如何获得与组、源和目标相关联的所有组的?
有两种方法可以做到这一点。
SerializerMethodField. data属性方法并将destination_group数据附加到policy键中。方法一:
class GroupSerializer(serializers.ModelSerializer):
policy = serializers.SerializerMethodField()
def get_policy(self, obj):
source_groups = PolicySnippetSerializer(obj.source_group.all(), many=True).data
destination_groups = PolicySnippetSerializer(obj.destination_group.all(), many=True).data
return source_groups + destination_groups
# rest of the code
Run Code Online (Sandbox Code Playgroud)
方法二:
class GroupSerializer(serializers.ModelSerializer):
policy = PolicySnippetSerializer(source ='source_group', many=True)
@property
def data(self):
serializer_data = super().data()
serializer_data['policy'] += PolicySnippetSerializer(self.instance.destination_group.all(), many=True).data
return serializer_data
# rest of the code
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1100 次 |
| 最近记录: |