2017-08-30 3 views
1

J'ai rencontré un problème lors de l'utilisation de django + reposful framework.comment filtrer une requête django définie par une clé étrangère dans un cadre reposant?

ici est mon intention:

il y a beaucoup de chapitres, chaque chapitre a beaucoup de mots, chaque mot a beaucoup développer des explications, ces explications sont proposées par les utilisateurs, certains d'entre eux sont invaild, dans le back-end je peux définir le champ de ces extensions est_alive à Faux.

dans views.py, actuellement j'envoie toutes ces données à frontend, j'ai essayé de nombreuses façons de filtrer ces données invaild, mais échoué.

ici sont des codes:

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) 

Répondre

0

manière simple l'utilisation 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 
+0

merci, cela fonctionne. – zon

+0

heureux d'aider, s'il vous plaît ne pas oublier d'accepter –

+0

je veux savoir où puis-je trouver les documents connexes. J'ai vérifié les documents officiels pertinents, mais je n'ai jamais trouvé cela. – zon