Django rest framework Django rest框架-在筛选时引发异常/处理空结果
我有一个用户配置文件类,正在检查用户是否存在,是否不想创建该用户 我使用userprofile的筛选器类,以便客户端可以调用: 如果结果为空,则将创建具有电子邮件地址的用户 是否有方法截获查询结果并在其为空时引发异常,并处理该异常以创建用户。 如果有更好的方法,我也希望得到纠正Django rest framework Django rest框架-在筛选时引发异常/处理空结果,django-rest-framework,Django Rest Framework,我有一个用户配置文件类,正在检查用户是否存在,是否不想创建该用户 我使用userprofile的筛选器类,以便客户端可以调用: 如果结果为空,则将创建具有电子邮件地址的用户 是否有方法截获查询结果并在其为空时引发异常,并处理该异常以创建用户。 如果有更好的方法,我也希望得到纠正 class UserQueryFilter(django_filters.rest_framework.FilterSet): email = django_filters.CharFilter(name="u
class UserQueryFilter(django_filters.rest_framework.FilterSet):
email = django_filters.CharFilter(name="user__email")
username = django_filters.CharFilter(name="user__username")
class Meta:
model = UserProfile
fields = ['email', 'username']
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserSerializer
filter_class = UserQueryFilter
感谢您的帮助
谢谢
AnandDjango Rest框架提供了默认禁用的功能。也许它可以为您提供另一种解决问题的方法: 另一方面,如果您确实需要通过带有querystring的GET请求创建用户,则可以使用django过滤器中的
MethodFilter
,例如:
class UserFilters(FilterSet):
user = MethodFilter(action='filter_user')
class Meta:
model = User
fields = ['user']
def filter_user(self, queryset, value):
if not value:
# Here Raise Exception
else:
# Check if the user exists, if not create it
users = queryset.filter(Q(username=value) | Q(email=value))
if not users.exists:
user = User.objects.create(...)
return queryset.filter(pk=user.id)
else:
return users
希望这能帮助你。我不太确定它是否能以那种确切的方式工作,但这是一个想法
就个人而言,我建议您尝试通过更合适的请求(如POST或PUT)来执行该任务,并在相应的方法中进行管理