Ошибка поля: не удается разрешить ключевое слово ‘shopfavorite’ в поле: Django

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

Я использую обратное foreignkey , используя функцию предопределения django prefetch_related . но я получаю сообщение об ошибке: FieldError: Cannot resolve keyword 'shopfavorite' into field. .
Также я получаю эту ошибку через командную строку: AttributeError: Cannot find 'shopfavorite_set' on ShopOwnerShopDetails object, 'shopfavorite_set' is an invalid parameter to prefetch_related()
В чем именно проблема? Буду признателен за любую помощь. заранее большое вам спасибо.

Модели :

 class User(AbstractBaseUser, PermissionsMixin):
    # common fields
    name = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

class ShopOwnerShopDetails(models.Model):
    shop_name = models.CharField(max_length=80, blank=True, null=True)
    shop_location = models.CharField(max_length=200)

class ShopFavorite(models.Model):
    shop_id = models.ForeignKey(ShopOwnerShopDetails, on_delete=models.CASCADE, related_name='favorite_shop_id')
    favorited_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_favorite_shop')

  

число просмотров :

 class GarageShopListView(ListAPIView):
    permission_classes = (IsAuthenticated,)
    def get(self,request,*args,**kwargs):
        user = request.user

        queryset = ShopOwnerShopDetails.objects.filter(
                shopfavorite__favorited_by=user
                ).prefetch_related('shopfavorite_set',)
        serializer = ShopOwnerShopDetailsSerializer(queryset, many=True, context={'request': request})
        data = serializer.data
  

Комментарии:

1. Можете ли вы показать нам свой User класс?

2. @OliverHnat Я отредактировал свой вопрос. пожалуйста, посмотрите на это.

3. у well ShopOwnerShopDetails нет FK для пользователя, разве вы не должны использовать ShopFavorite ?

Ответ №1:

ошибка, которую вы получаете, совершенно ясна: вы пытаетесь получить доступ к shopfavorite_set from ShopOwnerShopDetails , и в этой модели нет FK, указывающего на User.

Если я правильно понимаю, вы хотите получить список всех избранных магазинов для текущего пользователя. В этом случае я использую другой набор запросов

 queryset = ShopFavorite.objects.filter(
    favorited_by=user
).select_related('favorited_by', 'shop_id')
  

затем в сериализаторе у вас есть доступ к обоим User и ShopOwnerShopDetails экземпляру