【发布时间】:2021-07-04 03:09:47
【问题描述】:
我有以下 APIView:
class SubmitFormAPIView(APIView):
def put(self, request, pk):
# some other codes
form = Form.objects.get(id=pk)
tu_filter, target_user = self._validate_target_user(request, form)
user_status, created = UserFormStatus.objects.get_or_create(
tu_filter,
form_id=pk,
user_id=request.user.pk
)
# Some other codes.
def _validate_target_user(request, form):
if some_conditions:
return Q(), None
else:
try:
target_user_id = int(request.GET.get('target_user_id))
except ValueError:
raise ValidationError()
target_user = get_user_model().objects.get(id=target_user_id)
return Q(target_user_id=target_user_id), target_user
但是当 django 想要执行 get_or_create 方法时,会引发以下错误:
TypeError: 'Q' object is not iterable
注意:如果_validate_target_user() 返回Q(), None,则不会引发错误并且视图可以正常工作。返回return Q(target_user_id=target_user_id), target_user 时将引发错误。
我知道,问题信息没有填写,我只是想知道,这个错误是什么原因造成的?
【问题讨论】:
标签: django django-models django-orm django-q