Как программно предоставить "queryset" в PrimaryKeyRelatedField в DRF 3
для того, чтобы иметь не-readonly PrimaryKeyRelatedField
, необходимо предоставить набор запросов, содержащий допустимые параметры.
Как я могу правильно заполнить этот queryset на основе текущего запроса (пользователя)?
2 ответов
ключ к подклассу PrimaryKeyRelatedField
и перегрузить get_queryset
метод, используя информацию пользователя из контекста запроса:
class UserFilteredPrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
request = self.context.get('request', None)
queryset = super(UserFilteredPrimaryKeyRelatedField, self).get_queryset()
if not request or not queryset:
return None
return queryset.filter(user=request.user)
вы можете использовать этот новый сериализатор так же, как (нефильтрованный) оригинал:
class MySerializer(serializers.ModelSerializer):
related = UserFilteredPrimaryKeyRelatedField(queryset=MyModel.objects)
всякий раз, когда сериализатор обращается к queryset, он будет отфильтрован таким образом, что возвращаются только объекты, принадлежащие текущему пользователю.
имеет вид
self.request.user
атрибут, который затем можно использовать для получения пользовательского queryset например!--3-->
queryset = Products.objects.get(customer=self.request.user)