I have a model:
User
is the django User model from django.contrib.auth.models
# drink/models.py
class Drink(models.Model):
name = models.CharField(max_length=32)
bartender = models.ForeignKey('bartender.Bartender')
# bartender/models.py
class Bartender(models.Model):
name = models.CharField(max_length=64)
owner = models.ForeignKey(User)
# property/models.py
class Rating(models.Model):
bartender = models.ForeignKey('bartender.Bartender')
owner = models.ForeignKey(User)
I use django rest framework and would like a serializer Field as such:
# bartender/serializers.py
class BartenderSerializer(serializers.ModelSerializer):
rating = serializers.IntegerField(source='get_rating', read_only=True)
class Meta:
model = Bartender
fields = []
My Viewset is
class BartenderViewset(viewsets.ModelViewSet):
queryset = Bartender.objects.all()
serializer_class = BartenderSerializer
how do I add a model method to my Bartender
model, such that it returns the Rating
object for whatever User
is making the call.
I tried this modification to my Bartender
class:
# bartender/models.py
class Bartender(models.Model):
name = models.CharField(max_length=64)
owner = models.ForeignKey(User)
def get_rating(self):
return Rating.objects.get(bartender=self.id, owner=self.request.user)
However self
has no request. Therefore, I would like to know how to implement this so it is callable via drf viewsets.