2016-08-25 5 views
0

私はすべてのレビューを特定のレストランの特定のレビューへの返信と共に一覧にしたいと思いましたが、レビューのみを一覧表示できました。特定のレビューに対するすべての返信を取得しようとしているうちに、レビューモデルで定義されているchildren()を呼び出しました。それはquerysetを返しました。一方、私はすべての特定の返信を返信者の名前で欲しい。キッズセットは子供の鍵の中に返されます

serializers.py

class ReviewSeraializer(ModelSerializer): 
    reply_count = SerializerMethodField() 
    children = SerializerMethodField() 
    class Meta: 
     model = Review 
     read_only = ('id',) 
     fields = ('id','content_type','object_id','parent','review','children','reply_count','created') 

    def get_reply_count(self, obj): 
     if obj.is_parent: 
      return obj.children().count() 
     return 0 

    def get_children(self, obj): 
     obj_children = [] 
     if obj.is_parent: 
      return str(obj.children()) 
      # for obj in obj.children(): 
      # print(obj.review) 
      # obj_children.append(obj.review) 
      # return str(obj_children) 
     return None 

レビュー/ models.py

class Review(models.Model): 
    reviewer = models.ForeignKey(User, null=True) 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 
    parent = models.ForeignKey("self", null=True, blank=True, related_name="parent_review") 
    review = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 

    objects = ReviewManager() 


    def children(self): # replies 
     return Review.objects.filter(parent=self) 

    @property 
    def is_parent(self): 
     if self.parent is not None: 
      return False 
     return True 

enter image description here

特定の子どもキー内のすべての返信やリプライヤ名を一覧表示する方法レビュー?

答えて

1

子供をシリアル化できる別のシリアライザを追加します。

class ReviewSeraializerChild(serializers.ModelSerializer): 
    class Meta: 
     model = Review 


class ReviewSeraializer(serializers.ModelSerializer): 
    reply_count = serializers.SerializerMethodField() 
    children = ReviewSeraializerChild(many=True) 

    class Meta: 
     model = Review 
     read_only = ('id',) 
     fields = ('id', 'content_type', 'object_id', 'parent', 'review', 'children', 'reply_count', 'created') 

    def get_reply_count(self, obj): 
     if obj.is_parent: 
      return obj.children().count() 
     return 0 

しかし、あなたはあなたのカスタムがネストされたフィールドenter image description hereのための()とupdate()関数を作成する記述する必要があります。

+0

投稿コメントが有効であり、また返信します。また、djangoテンプレートを使用して特定のレビューの返信を取得することができましたが、reactjsとapiを使用して特定のレビューの返信を取得するだけの問題があります。私は今この方法で試してみます。 – pythonBeginner

+0

https://github.com/alanjds/drf-nested-routersを確認してください。ネストされたルートを作成すると、reactJSを使用してレビューapiを簡単に管理できます。 –

関連する問題