ValueError: Невозможно выполнить запрос "sohanur": Должен быть экземпляр "CustomUser"
Я пытаюсь отфильтровать список поставщиков в соответствии с request.user.vendor. Это работает и позволяет получить запрашиваемого пользователя, но здесь я не могу выполнить запрос по списку поставщиков. Vendor имеет отношение onetoone с моим пользовательским пользователем. Как сделать запрос?
#это моя модель
class CustomUser(AbstractUser):
number = models.CharField(max_length=200, blank=True, null=True)
isVendor = models.BooleanField(default=False, blank=True, null=True)
class Vendor(models.Model):
user = models.OneToOneField(CustomUser, related_name='vendor', on_delete=models.CASCADE, null=True, blank=True)
distributor_for = models.ManyToManyField(Distributor, null=False, blank=True)
name = models.CharField(max_length=200, blank=True, null=True)
profile_picture = models.ImageField(null=True, blank=True)
address = models.TextField(max_length=2000, blank=True, null=True)
latitude = models.DecimalField(max_digits = 13, decimal_places = 7, blank=True, null=True)
longitude = models.DecimalField(max_digits = 13, decimal_places = 7,blank=True, null=True)
is_verified = models.BooleanField(default=False)
createdAt = models.DateTimeField(auto_now_add=False, null=True, blank=True)
def __str__(self):
return self.name
#это мое представление api
@api_view(['GET'])
@permission_classes([IsVendor])
def getVendors(request):
user = request.user.vendor
print(user)
vendor = Vendor.objects.all().filter(user=user)
serializer = VendorSerializer(vendor, many=False)
return Response(serializer.data)
#это мой сериализатор
class VendorSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField(read_only=True)
class Meta:
model = Vendor
fields = '__all__'
def get_user(self, obj):
user = obj.user
serializer = UserSerializer(user, many=False)
return serializer.data
##Error
проверьте мою ошибку traceback и, пожалуйста, помогите мне решить это.
Это выглядит неправильно, хотя не вся информация доступна в вопросе
user = request.user.vendor # a Vendor instance
vendor = Vendor.objects.all().filter(user=user) # user field -> CustomUser
# =user, Vendor instance
Должно быть .filter( user=request.user) ?
измените запрос на
vendor = Vendor.objects.filter(user=user)
в вашем представлении API.