2016-03-18 5 views
0

у меня есть API, который имеет повторяющееся число полого для одинаковых сообщенийДжанго апи делает список полого

enter image description here

Хотя комментариев принадлежат же названию, они разделены на другого объект. Я хотел, чтобы комментарии были списком вроде "comments": ["hi1","hi2","hi3","hi4","ads"], не знаю, как этого добиться. Все, чтобы быть в одном словаре

Моя модель

class Post(models.Model): 
    title=models.CharField(max_length=200) 
    description=models.TextField(max_length=10000) 
    pub_date=models.DateTimeField(auto_now_add=True) 


    def __unicode__(self): 
     return self.title 

    def description_as_list(self): 
     return self.description.split('\n') 

class Comment(models.Model): 
    title=models.ForeignKey(Post) 
    comments=models.CharField(max_length=200) 

    def __unicode__(self): 
     return '%s' % (self.title) 

сериализатора

class CommentSerializer(serializers.ModelSerializer): 
    id = serializers.CharField(source="title.id", read_only=True) 
    title = serializers.CharField(source="title.title", read_only=True) 

    class Meta: 
     model = Comment 
     fields = ('id','title','comments') 


class PostSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Post 
     fields = ('id','title','description','pub_date') 

views.py

class CommentList(generics.ListCreateAPIView): 
    queryset = Comment.objects.all() 
    serializer_class = CommentSerializer 

class CommentDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = Comment.objects.all() 
    serializer_class = CommentSerializer 

Что можно сделать, чтобы сделать список?

Любая помощь очень appreciated..Thanks заранее

ответ

0

Потому что комментарии имеют смысл только для данной должности, я хотел бы предложить, чтобы избавиться от CommentList и вместо того, чтобы просто добавить комментарии в список, который вы хотите, на каждом после. Вы можете легко сделать это, изменив свой PostSerializer:

class PostSerializer(serializers.ModelSerializer): 
    comments = serializers.SerializerMethodField(read_only=True) 
    class Meta: 
     model = Post 
     fields = ('id','title','description','pub_date', 'comments') 

    def get_comments(self, obj): 
     comment_list = obj.comment_set.all() 
     data = [] 
     for comment in comment_list: 
      data.append(comment.comments) 
     return data 

Это должно добавить список комментариев к каждому сообщению.

Сообщите мне, если это не совсем то, что вы искали.

+0

Вы можете избавиться от read_only = True. По умолчанию для SerializerMethodField я предполагаю. –

+0

@ davka ... Я думаю, что есть проблема с линией ...... data.append (comment.comments) ............. моя IDE говорит, что не может искать комментарии – Coeus

+0

комментарии должны автоматически добавляться django, когда вы используете 'title = models.ForeignKey (Post)' в своей модели. Ваша IDE может не понимать django. Попробуйте изменить модель на 'title = models.ForeignKey (Post, related_name = 'comments')'. См. Http://stackoverflow.com/questions/2642613/what-is-related-name-used-for-in-django – dkarchmer

Смежные вопросы