【问题标题】:how to filter a django query set by a foreign key in restful framework?如何在restful框架中过滤由外键设置的django查询?
【发布时间】:2017-08-30 16:42:53
【问题描述】:

我在使用 django + restful 框架时遇到了一个问题。

这是我的意图:

章节很多,每章有很多词,每个词都有很多扩展解释,这些解释是用户提供的,所以有些是无效的,在后台我可以设置这些扩展字段is_alive 改为 错误

views.py中,目前我将所有这些数据发送到前端,我尝试了很多方法来过滤掉这些无效数据,但都失败了。

代码如下:

models.py

class Chapter(models.Model):
    chap = models.IntegerField('chaptername')

class Word(models.Model):
    chapter = models.ForeignKey('Chapter', related_name='voca')
    word = models.CharField('name', max_length=255)

class Expand(models.Model):
    belong = models.ForeignKey('Word', related_name='expand')
    explansion = models.TextField('description')
    is_alive = models.BooleanField('status', default=True)

serializers.py

class ExpandSerializer(serializers.ModelSerializer):
    class Meta:
        model = Expand
        fields = ('explansion', )

class WordSerializer(serializers.ModelSerializer):
    expand = ExpandSerializer(many=True)

    class Meta:
         model = Word
         fields = ('id', 'word', 'expand')

class ChapterSerializer(serializers.ModelSerializer):
    voca = WordSerializer(many=True)

    class Meta:
        model = Chapter
        fields = ('id', 'chap', 'voca')

views.py

def getChapter(request):

    if request.method == 'GET':

        chapter = Chapter.objects.get(pk=1)
        serializer_c = ChapterSerializer(chapter)
        return JsonResponse(serializer_c.data)

【问题讨论】:

    标签: django django-rest-framework django-queryset


    【解决方案1】:

    简单方式使用serializers.SerializerMethodField

    class WordSerializer(serializers.ModelSerializer):
        expand = serializers.SerializerMethodField()
    
        class Meta:
             model = Word
             fields = ('id', 'word', 'expand')
    
        def get_expand(self, obj):
            qs = obj.expand.filter(is_alive=True)
            serializer = ExpandSerializer(qs, many=True)
            return serializer.data
    

    【讨论】:

    • 我想知道在哪里可以找到相关文档。我检查了相关的官方文档,但从未找到。
    • 答案use serializers.SerializerMethodField是链接试试
    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2013-09-17
    • 2014-09-11
    • 2022-09-26
    • 1970-01-01
    • 2023-03-11
    • 2020-10-22
    • 2011-05-16
    相关资源
    最近更新 更多