0

I have this serializer:

class ReviewSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)

    class Meta:
        model = Review
        fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'review_text',)

I want to mention that user and movie are both ForeignKeys defined in models.py for Review model. Here is the model:

class Review(models.Model):
    title = models.CharField(max_length=255)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='reviews')
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE, related_name='reviews')
    review_text = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{movie} review by {user}'.format(user=self.user, movie=self.movie)

I want to create a viewset, but if I do something like this:

class ReviewsViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()
    serializer_class = ReviewSerializer

and register it like this:

router.register(r'reviews', views.ReviewsViewSet, 'reviews')

won't work, it requires me to provide a movie field as logged here:

AttributeError at /api/reviews/
Got AttributeError when attempting to get a value for field `movie` on serializer `ReviewSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Movie` instance.
Original exception text was: 'Movie' object has no attribute 'movie'.

Thanks in advance.

Edited.

yierstem
  • 1,933
  • 5
  • 21
  • 42
  • 2
    user is foreign key, as well as the user ? It is not clear what you mean. Also include desired functionality - example of an endpoint, input and output. – Enthusiast Martin Sep 25 '18 at 05:11
  • 1
    @yierstem it's not clear what you're asking. Please make it clear – JPG Sep 25 '18 at 05:22
  • Sorry for late edit and thank you for bringing me this to attention. I edited the post. – yierstem Sep 25 '18 at 14:47
  • 1
    your queryset = Movie.objects.all() should be Review.objects.all() as you want to serialize Review (from the serializer code) not the movie. Indeed - Movie has no movie attribute, this is why your view fails. – opalczynski Sep 25 '18 at 19:33
  • Oh, I overlooked that. But now I get `IntegrityError at /api/reviews/ NOT NULL constraint failed: api_review.user_id`, I don't actually know why this occurs. – yierstem Sep 26 '18 at 11:57

0 Answers0