2017-07-05 5 views
0

Ich versuche, einen Kommentar in einer erholsamen API mit Django 1.11.2 zu erstellen. Momentan füge ich das Tutorial "Blog API mit Django Rest Framework" von "CodingEntrepreneurs" hinzu. Ich weiß nicht, was das Problem ist.Django: `create()` hat keine Objektinstanz zurückgegeben

Dies ist der Code Serializer:

def create_comment_serializer(model_type='post', slug=None, parent_id=None, user=None): 
    class CommentCreateSerializer(ModelSerializer): 
     class Meta: 
      model = Comment 
      fields = [ 
       'id', 
       'content', 
       'timestamp', 
      ] 
     def __init__(self, *args, **kwargs): 
      self.model_type = model_type 
      self.slug = slug 
      self.parent_obj = None 
      if parent_id: 
       parent_qs = Comment.objects.filter(id=parent_id) 
       if parent_qs.exists() and parent_qs.count() ==1: 
        self.parent_obj = parent_qs.first() 
      return super(CommentCreateSerializer, self).__init__(*args, **kwargs) 

     def validate(self, data): 
      model_type = self.model_type 
      model_qs = ContentType.objects.filter(model=model_type) 
      if not model_qs.exists() or model_qs.count() != 1: 
       raise ValidationError("This is not a valid content type") 
      SomeModel = model_qs.first().model_class() 
      obj_qs = SomeModel.objects.filter(slug=self.slug) 
      if not obj_qs.exists() or obj_qs.count() != 1: 
       raise ValidationError("This is not a slug for this content type") 
      return data 

     def create(self, validated_data): 
      content = validated_data.get("content") 
      if user: 
       main_user = user 
      else: 
       main_user = User.objects.all().first() 
      model_type = self.model_type 
      slug = self.slug 
      parent_obj = self.parent_obj 
      comment = Comment.objects.create_by_model_type(
       model_type, slug, content, main_user, 
       parent_obj=parent_obj 
      ) 
      return comment 

    return CommentCreateSerializer 

dies ist der Ansicht Code:

class CommentCreateAPIView(CreateAPIView): 
    queryset = Comment.objects.all() 
    #serializer_class = PostCreateUpdateSerializer 
    permission_classes = [IsAuthenticated] 

    def get_serializer_class(self): 
     model_type = self.request.GET.get("type") 
     slug = self.request.GET.get("slug") 
     parent_id = self.request.GET.get("parent_id", None) 
     return create_comment_serializer(
       model_type=model_type, 
       slug=slug, 
       parent_id=parent_id, 
       user=self.request.user 
       ) 
+2

Was ergibt 'ContentType.objects.filter (model = model_type) '? Denn wenn Sie das Original ['create_by_model_type()'] verwenden (https://github.com/codingforentrepreneurs/Blog-API-with-Django-Rest-Framework/blob/ebce1ea22d6a70325c0f18ede52f44dc9a4671d5/src/comments/models.py#L36) Wenn der Typ nicht gefunden wurde, wird 'None' zurückgegeben. – dhke

+0

danke! habe den fehler dort nicht gesehen, war nur auf die api fokussiert. –

Antwort

0

Irgendwie Ihre Comment.objects.create_by_model_type() zu schaffen ist nicht ein beliebiges Objekt und erstellen() -Methode didn‘ Ich habe nichts gefunden, um zurückzukehren.

Verwandte Themen