我的User类如下所示:

class User(AbstractBaseUser, SafeDeleteModel, PermissionsMixin):
    UNKNOWN = 'Unknown'

    id = models.AutoField(primary_key=True)
    email = models.EmailField(unique=True)
    default_organization = models.ForeignKey(to='Organization', on_delete=models.SET_NULL, null=True,
                                             related_name='default_organization', blank=True)

    organizations = models.ManyToManyField(to='Organization', through='UserOrganizationMembership',
                                           related_name='users', blank=True)

因此,一个用户可以是多个组织的一部分.然而,他每次登录时,都必须通过一个组织登录. 现在我有两种组织在场-内部的,客户的 我的应用程序有一些遥测设置, idea 是我不想发送任何内部组织的遥测. 我想在/USERS API中创建一个返回该标志的属性(标志取决于用户和他登录时使用的帐户).

我的视图类如下所示:

class UsersViewSet(UpdateModelMixin,
                   ListModelMixin,
                   GenericViewSet):
    queryset = User.objects.all()
    serializer_class = UserDetailSerializer

    def get_serializer_context(self):
        context = super().get_serializer_context()
        #self.request.user.is_telemetry_enabled =should_send_event(self.request.user, self.request.tenant.is_internal)
        context.update({"request": self.request})

        return context

    def get_permissions(self):
        permission_classes = [IsStaff] if self.action in ('list',) else [CanEditUser]
        return [permission() for permission in permission_classes]

我看到的是:

  1. 在模型类中增加一个字段,并将其设置为get_serializer_context.不起作用,因为在模型中添加一个字段会使其成为一个类变量,而不是每个实例.其次,它仍然没有出现在/USERS的响应中.
  2. 将其设置为Models/users.py中的属性.不起作用,因为在设置属性时,唯一允许的参数是self,而我的标志取决于self以及登录时使用的帐户.此信息出现在我请求上下文中.

TLDR: 我希望我的GET /users(映射到UsersViewSet)端点返回一个额外的参数,该参数在每次命中该端点时计算.目前,它返回直接从数据库中选取的模型.

我如何实现这一点?我对Django/Python还是个新手

推荐答案

您可以在"UserDetailSerializer"类中添加计算字段,您可以在其中计算所需的值,例如Session.

Python相关问答推荐

如何计算两极打印机中 * 所有列 * 的出现次数?

使用miniconda创建环境的问题

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

在Mac上安装ipython

如何获取numpy数组的特定索引值?

基于索引值的Pandas DataFrame条件填充

梯度下降:简化要素集的运行时间比原始要素集长

python中字符串的条件替换

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

Django—cte给出:QuerySet对象没有属性with_cte''''

如何在Python中使用另一个数据框更改列值(列表)

如何更改groupby作用域以找到满足掩码条件的第一个值?

在Python中调用变量(特别是Tkinter)

python中csv. Dictreader. fieldname的类型是什么?'

比Pandas 更好的 Select

递归函数修饰器

如何在一组行中找到循环?

如何关联来自两个Pandas DataFrame列的列表项?

Django更新视图未更新

按最大属性值Django对对象进行排序