我的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]
我看到的是:
- 在模型类中增加一个字段,并将其设置为
get_serializer_context
.不起作用,因为在模型中添加一个字段会使其成为一个类变量,而不是每个实例.其次,它仍然没有出现在/USERS的响应中. - 将其设置为Models/users.py中的属性.不起作用,因为在设置属性时,唯一允许的参数是
self
,而我的标志取决于self
以及登录时使用的帐户.此信息出现在我请求上下文中.
TLDR:
我希望我的GET /users
(映射到UsersViewSet)端点返回一个额外的参数,该参数在每次命中该端点时计算.目前,它返回直接从数据库中选取的模型.
我如何实现这一点?我对Django/Python还是个新手