我有个模特:
User是来自django.contrib.auth.models的django用户模型
# 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)我使用django rest框架,并希望这样一个序列化器字段:
# bartender/serializers.py
class BartenderSerializer(serializers.ModelSerializer):
rating = serializers.IntegerField(source='get_rating', read_only=True)
class Meta:
model = Bartender
fields = []我的观点是
class BartenderViewset(viewsets.ModelViewSet):
queryset = Bartender.objects.all()
serializer_class = BartenderSerializer如何将模型方法添加到我的Bartender模型中,以便它返回Rating对象,用于任何User正在调用的对象。
我尝试过对我的Bartender类进行这种修改:
# 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)但是,self没有请求。因此,我想知道如何实现这一点,以便它可以通过drf视图集调用。
发布于 2018-02-03 15:12:14
实际上,您可以在不修改模型的情况下做到这一点。只需使用SerializerMethodField评估序列化程序级别上的数据即可。
class BartenderSerializer(serializers.ModelSerializer):
rating = serializers.SerializerMethodField()
class Meta:
model = Bartender
fields = []
def get_rating(self, obj):
return Rating.objects.get(bartender=obj.id, owner=self.context.get('request').user).values('rating')https://stackoverflow.com/questions/48598779
复制相似问题