фильтр полей, связанных с django, с диапазоном

#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. Спасибо за ответ.