rest_framework 外键关联反查询

折腾这个问题折腾了小半天,按照网站的例子

我的model为:

class Article(models.Model): title = models.CharField(max_length=50, verbose_name='文章标题') desc = models.CharField(max_length=50, verbose_name='文章描述') content = models.TextField(verbose_name='文章内容') click_count = models.IntegerField(default=0, verbose_name='点击次数') is_recommend = models.BooleanField(default=False, verbose_name='是否推荐') date_publish = models.DateTimeField(auto_now_add=True, verbose_name='发布时间') user = models.ForeignKey(User, verbose_name='用户') category = models.ForeignKey(Category, blank=True, null=True, verbose_name='分类') tag = models.ManyToManyField(Tag, verbose_name='标签') #关联管理器 objects = ArticleManager() class Meta: verbose_name = '文章' verbose_name_plural = verbose_name ordering = ['-date_publish'] #减号代表倒序排列 def __unicode__(self): return self.title class Category(models.Model): """文章分类的model""" name = models.CharField(max_length= 30, verbose_name='分类名称') index = models.IntegerField(default= 999, verbose_name='分类的排序') class Meta: """admin看到的中文名""" verbose_name = '分类' verbose_name_plural = verbose_name #排序 升序排列,先按照index排序 如果相等按照id排序 倒序排列 加 - ordering = ['index', 'id'] def __unicode__(self): """admin调用的时候默认返回这里 必须是字符串类型的 """ return self.name

其实很简单 我要查询每一个分类下面的所有文章,按照 http://www.django-rest-framework.org/api-guide/relations/  说的 使用StringRelatedField 一直报错 ,说article没有这个属性什么的 后来发现,原来是外键关联的时候要设置related_name=  如果不设置,那么在使用的时候,serializers的时候,应该使用表名_set  字段,所以想到得到目标结果,应该这么写

class CategorySerializer(serializers.ModelSerializer):

    article_set = serializers.StringRelatedField(many=True)
    class Meta:
        model = Category
        fields = ('name', 'index', 'article_set')

注意article_set  我就是被这个坑了,或者设置related_name 或者使用表名_set 就行了 最后得到结果如下,得到我想要的
[
    {
        "name": "测试的第一个分类",
        "index": 1,
        "article_set": [
            "李克强出席2016年夏季达沃斯论坛开幕式并发表特别致辞",
            "我是个标题",
            "测试文章第一个"
        ]
    },
    {
        "name": "测试的第二个",
        "index": 2,
        "article_set": []
    },
    {
        "name": "测上电脑",
        "index": 999,
        "article_set": []
    }
]

你可能感兴趣的:(rest_framework 外键关联反查询)