#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
экземпляру