首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django Rest框架-模型方法中的self.request.user

Django Rest框架-模型方法中的self.request.user
EN

Stack Overflow用户
提问于 2018-02-03 15:08:17
回答 1查看 1.7K关注 0票数 1

我有个模特:

User是来自django.contrib.auth.models的django用户模型

代码语言:javascript
运行
复制
# 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框架,并希望这样一个序列化器字段:

代码语言:javascript
运行
复制
# bartender/serializers.py
class BartenderSerializer(serializers.ModelSerializer):
    rating = serializers.IntegerField(source='get_rating', read_only=True)

    class Meta:
        model = Bartender
        fields = []

我的观点是

代码语言:javascript
运行
复制
class BartenderViewset(viewsets.ModelViewSet):
    queryset = Bartender.objects.all()
    serializer_class = BartenderSerializer

如何将模型方法添加到我的Bartender模型中,以便它返回Rating对象,用于任何User正在调用的对象。

我尝试过对我的Bartender类进行这种修改:

代码语言:javascript
运行
复制
# 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视图集调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-03 15:12:14

实际上,您可以在不修改模型的情况下做到这一点。只需使用SerializerMethodField评估序列化程序级别上的数据即可。

代码语言:javascript
运行
复制
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')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48598779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档