#python #django
#питон #джанго
Вопрос:
Я попытался отфильтровать диапазон keyword_id в таблице book. Однако следующая ошибка продолжает возникать. Как я могу отфильтровать диапазон keyword_id?
вот мой код
UserBook.objects.prefetch_related('book').filter(book__keyword_id__range=(2,7)).values(
'book_id').annotate(count=Count('book_id')).order_by('-count')
это ошибка
raise FieldError('Related Field got invalid lookup: {}'.format(lookup_name))
django.core.exceptions.FieldError: Related Field got invalid lookup: range
вот это models.py
class UserBook(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
book = models.ForeignKey('book.Book', on_delete=models.CASCADE)
page = models.IntegerField()
time = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta :
db_table = 'user_books'
class Book(models.Model):
title = models.CharField(max_length=45)
subtitle = models.CharField(max_length=45, null=True)
image_url = models.URLField(max_length=200)
company = models.CharField(max_length=45)
author = models.CharField(max_length=200)
about_author = models.TextField(null=True)
contents = models.TextField(default='')
company_review = models.TextField(null=True)
page = models.IntegerField(default='')
publication_date = models.DateField()
description = models.TextField(null=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
keyword = models.ForeignKey(Keyword, on_delete=models.SET_NULL, null=True)
reviews = models.ManyToManyField('user.User', through='Review')
class Meta:
db_table = 'books'
Ответ №1:
заменить:
book__keyword_id__range(2,7)
с:
book__keyword_id__range=(2,7) # needs to be "=" sign.
документ здесь о диапазоне
Комментарии:
1. если это не решит вашу проблему, пожалуйста, укажите свои модели в вашем вопросе.
2. Я пытался, как вы сказали, но это не решило проблему. Я загрузил модели. py в теле. Я был бы признателен, если бы вы проверили.
3. Я решил эту проблему. Я использовал gte, а не range. Спасибо за ответ.