相关疑难解决方法(0)

django休息框架 - 你如何压扁嵌套数据?

我有一个管理多对多关系的"通过"模型,我希望能够将"直通"模型和目标模型作为平面数据返回,而不是将目标模型嵌套.

因此,使用标准示例来表示多个到一个通过,说这些是模型,

class Person(models.Model):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    favourite_food = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

所以我目前返回会员资格的序列化工具是,

class MembershipSerializer(serializers.HyperlinkedModelSerializer):
    person = PersonSerializer()

    class Meta:
        model = Membership
        fields = ('id', 'url', 'group', 'date_joined', 'invite_reason', 'person')

class PersonSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Person
        fields = ('first_name', 'last_name', 'favourite_food')
Run Code Online (Sandbox Code Playgroud)

所以当我使用MembershipSerializer检索一个会员模型时,我得到了这个json,

{
    'id':1,
    'url':'http://cheeselovers.com/api/member/1/'
    'group':'http://cheeselovers.com/api/group/1/'
    'date_joined': '2014-01-24T16:33:40.781Z',
    'invite_reason': 'loves cheese',
    'person':{
        'first_name':'Barry',
        'last_name':'CheeseLover', …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

27
推荐指数
4
解决办法
7524
查看次数

标签 统计

django ×1

django-rest-framework ×1