D. *_*ake 7 django django-models django-rest-framework
我有模型 - 商品、服装和儿童模型,如配饰、外套等:
class Commodity(models.Model):
atribute = models.CharField()
class Clother(models.Model):
commodity = models.ForeignKey(Commodity)
clother_atribute = models.CharField()
class Acessories(models.Model):
clother = models.ForeignKey(Clother)
acessories_atribute = models.CharField()
class Outwear(models.Model):
clother = models.ForeignKey(Clother)
outwear_atribute = models.CharField()
Run Code Online (Sandbox Code Playgroud)
如何序列化父模型商品以调用所有垂直依赖项。我想查询 Commodity id 并获取所有 Clother 属性和 Acessories 或 Outwear 属性。谢谢!
或者,也可以使用以下方法来实现SerializerMethodField:http ://www.django-rest-framework.org/api-guide/fields/#serializermethodfield
class ClotherSerializer(serializers.ModelSerializer):
"""
Serializer for Clother data model.
"""
acessories = serializers.SerializerMethodField()
outwears = serializers.SerializerMethodField()
class Meta:
model = Clother
fields = ('id', 'acessories', 'outwears')
def get_acessories(self, clother):
return AcessoriesSerializer(clother.acessories_set.all(), many=True).data
def get_outwears(self, clother):
return OutwearSerializer(clother.outwear_set.all(), many=True).data
class CommoditySerializer(serializers.ModelSerializer):
"""
Serializer for Commodity data model.
"""
clother = serializers.SerializerMethodField()
class Meta:
model = Commodity
fields = ('id', 'clother')
def get_clother(self, commodity):
return ClotherSerializer(commodity.clother_set.all(), many=True).data
Run Code Online (Sandbox Code Playgroud)
如果我理解你的问题,你可以定义ClotherSerializer. 您可以使用depth = 1在此序列化程序中序列化嵌套对象:
class ClotherSerializer(serializers.ModelSerializer):
class Meta:
model = Clother
fields = ('id', 'acessories_set', 'outwear_set')
depth = 1
Run Code Online (Sandbox Code Playgroud)
稍后CommoditySerializer您可以使用ClotherSerializer序列化服装及其所有关系:
class CommoditySerializer(serializers.ModelSerializer):
clother_set = ClotherSerializer(many=True)
class Meta:
model = Commodity
fields = ('id', 'clother_set')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4613 次 |
| 最近记录: |