creating post on a review model

Viewed 29

I need help leaving a review to a another model as a user, ive been having errrors and tried a lot of solutions. error

FieldError at /reviews/1
Cannot resolve keyword 'user' into field. Choices are: id, pet_owner, pet_owner_id, rating, review, sitter, sitter_id

This is my view function:

 

def post(self, request, pk):
     user = Review(pet_owner = request.user)
     sitter = get_object_or_404(Sitter, pk=pk)
     data = request.data
     review = Review.objects.create(
                pet_owner_id = user,
                sitter= sitter,
                rating=data['rating'],
                review=data['review'] 
            )
     return Response('Review Added', status=status.HTTP_400_BAD_REQUEST)

and these are the models:

    class Review(models.Model):
      review = models.CharField(max_length=500)
      rating = models.DecimalField(max_digits=7, decimal_places=2)
      sitter = models.ForeignKey(Sitter,on_delete=models.CASCADE,null=True)
      pet_owner = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,null=True)
    
    class Sitter(models.Model):
        first_name = models.CharField(max_length=255, default='Jane')
        last_name = models.CharField(max_length=255, default='Doe')
        zipcode = models.CharField(max_length = 5, default='12345')
        supersitter = models.BooleanField(null=True, blank=True)
        price = models.DecimalField(max_digits=7, decimal_places=2)
        numReviews = models.IntegerField(null=True, blank=True, default=0)
        rating = models.DecimalField(max_digits=7, decimal_places=2, default=0)

this is my review model and sitter model

   

     def post(self, request):
            """Create request"""
            print(request.data)
            # Add user to request data object
            # Serialize/create review
            review_user = request.user
            review_data = Review(pet_owner = review_user)
            review = ReviewSerializer(review_data, data=request.data)
            # If the review data is valid according to our serializer...
            if review.is_valid():
                # Save the created review & send a response
                r = review.save()
                return Response({ 'review': review.data }, status=status.HTTP_201_CREATED)
            # # If the data is not valid, return a response with the errors
            return Response(review.data, status=status.HTTP_400_BAD_REQUEST)

we also tried this

1 Answers

user should be a simple User object, so:

def post(self, request, pk):
    sitter = get_object_or_404(Sitter, pk=pk)
    data = request.data
    review = Review.objects.create(
        pet_owner=request.user,
        sitter=sitter,
        rating=data['rating'],
        review=data['review'] 
    )
    return Response('Review Added', status=status.HTTP_400_BAD_REQUEST)

You can slightly optimize the method by using the pk immediately:

def post(self, request, pk):
    review = Review.objects.create(
        pet_owner=request.user,
        sitter_id=pk,
        rating=data['rating'],
        review=data['review'] 
    )
    return Response('Review Added', status=status.HTTP_400_BAD_REQUEST)

but it might be better to work with a serializer to properly validate and clean the request data.

Related