Django Rest Framework 序列化程序检查相关多对多字段中是否存在
Django Rest Framework serializer check if exists in related Many to Many fiield
我有一个自定义用户模型,其中 blocked
字段为
class User(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
blocked = models.ManyToManyField("User", related_name="blocked_by", blank=True)
我正在尝试使用一个序列化程序,我可以在其中通过用户 ID 查找用户并确定他们是否被登录用户阻止
我当前是序列化器
class UserSerializer(serializers.ModelSerializer):
is_blocked = serializers.BooleanField() # need to populate this
class Meta:
model = User
fields = ['id', 'email', 'user_type', 'is_blocked']
和我的观点
class UserDetail(generics.RetrieveAPIView):
authentication_classes = (authentication.JWTAuthentication,)
permission_classes = (permissions.IsAuthenticated,)
serializer_class = UserSerializer
queryset = User.objects.all()
我只是不确定如何填充该值,以便查询的用户是否在已登录用户的 blocked
manyToMany 字段中是否为真
你可以用SerializerMethodField计算一下。获取认证用户并检查序列化用户是否在阻止列表中。
class UserSerializer(serializers.ModelSerializer):
is_blocked = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id', 'email', 'user_type', 'is_blocked']
def get_is_blocked(self, obj):
# you might need to do some fixes in this method, I'm not 100% sure that it works like you want
logged_in_user = self.context['request'].user # the authenticated user
is_blocked = logged_in_user.blocked.filter(id=obj.id).exists() # check if the serialized user (obj) is in the auth user blocked list
return is_blocked
我有一个自定义用户模型,其中 blocked
字段为
class User(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
blocked = models.ManyToManyField("User", related_name="blocked_by", blank=True)
我正在尝试使用一个序列化程序,我可以在其中通过用户 ID 查找用户并确定他们是否被登录用户阻止
我当前是序列化器
class UserSerializer(serializers.ModelSerializer):
is_blocked = serializers.BooleanField() # need to populate this
class Meta:
model = User
fields = ['id', 'email', 'user_type', 'is_blocked']
和我的观点
class UserDetail(generics.RetrieveAPIView):
authentication_classes = (authentication.JWTAuthentication,)
permission_classes = (permissions.IsAuthenticated,)
serializer_class = UserSerializer
queryset = User.objects.all()
我只是不确定如何填充该值,以便查询的用户是否在已登录用户的 blocked
manyToMany 字段中是否为真
你可以用SerializerMethodField计算一下。获取认证用户并检查序列化用户是否在阻止列表中。
class UserSerializer(serializers.ModelSerializer):
is_blocked = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id', 'email', 'user_type', 'is_blocked']
def get_is_blocked(self, obj):
# you might need to do some fixes in this method, I'm not 100% sure that it works like you want
logged_in_user = self.context['request'].user # the authenticated user
is_blocked = logged_in_user.blocked.filter(id=obj.id).exists() # check if the serialized user (obj) is in the auth user blocked list
return is_blocked