related_name实现反向取值

related_name实现反向取值

在django中,外键字段可以设置属性related_name,实现在serializer的时候通过属性值反向取出想要的数据。
1. 设置

 parent_category = models.ForeignKey("self", null=True, blank=True,verbose_name="父类目级别",related_name="sub_cat")

设置了一个父类别字段,为一个外键,一个父类别有多个子类别
2. 使用
“`
class CategorySerializer2(serializers.ModelSerializer):
# all next level category(lev 3) under current category(lev2)
sub_cat = CategorySerializer3(many=True)

class Meta:
    model = GoodsCategory
    fields = "__all__"

class CategorySerializer(serializers.ModelSerializer):
“””
nested serialize
goods category serializer class
“””
# all next level category(lev 2) under current category(lev1)
sub_cat = CategorySerializer2(many=True)

class Meta:
    model = GoodsCategory
    fields = "__all__"

class GoodsImageSerializer(serializers.ModelSerializer):

class Meta:
    model = GoodsImage
    fields = ("image",)

“`
通过层级分化,加上related_name作用实现,取出具体某一个父类别下面所有的子类别。

总结:我们已知的外键就是一种一对多的关系,一个主键下面,有多个外键子实例,也就是说A 如果有一个外键字段为B,那就是说,一个B实例对象,可以对应多个A实例对象,那么通过设置related_name字段,就可以取得某个B实例下,所有的A实例对象。

当然在django中还可以通过a.b_set来取值,

猜你喜欢

转载自blog.csdn.net/newbietan/article/details/80437110