0

次のステートメントを使用して、djangoでCOUNT GROUP BYを作成しようとしました

top_book = Borrow.objects.filter(beginDate__gte=str(weekAgoDate)).values('book').order_by().annotate(num_borrow=Count('book')).order_by('-num_borrow')[:5]

しかし、テンプレートのデータにアクセスしようとすると、何も出力されません

{% for cont in top_book %}        
<tr>
<td><a href="/toplibrary/bookInfo/{{ cont.book.idBook }}/">{{ cont.book.title }}</a></td><td>{{ cont.book.isbn }}</td><td>{{ cont.book.author }}</td><td>{{ cont.book.editor }}</td>    

</tr>{% endfor %}

だから私は自分の本について必要なすべての情報を取得するためにクラス Book で IN ステートメントを実行しようとしました

top_books=Book.objects.filter(idBook__in=top_book) 

しかし、私はこのエラーが発生します

"This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"

誰かが解決策を提案できますか?

class Book(models.Model):
    idBook = models.IntegerField(primary_key=True)
    title = models.CharField(max_length=255)
    isValid = models.BooleanField(default=True)
    linkDescr = models.CharField(max_length=255)
    editor = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    isbn = models.BigIntegerField()
    categories = models.ManyToManyField(Category, verbose_name="Categories")
    position = models.ForeignKey(Position, verbose_name="Position")
    addedDate = models.DateTimeField()

class Borrow(models.Model):
    beginDate = models.DateField()
    renewed = models.BooleanField(default=False)
    user = models.ForeignKey(User, verbose_name="BorrowHasUser")
    book = models.ForeignKey(Book, verbose_name="BorrowHasBook")
    returnDate = models.DateField(blank=True, null=True)
4

1 に答える 1

0

待って、あなたは最も借りた本を手に入れようとしていますか?

多分これはもっと理にかなっているでしょう:

top_book = Book.objects.annotate(num_borrow=Count('borrow')).order_by('-num_borrow')[:5]

related_nameフィールドにセットがある場合は、のBorrow.book代わりにそれを使用してくださいborrow

 

申し訳ありませんが、最初に自動操縦で答えました。

于 2013-01-16T23:14:52.243 に答える