我是Python和Django的新手。Django Admin list_display添加列[相關外鍵的計數記錄]
我正在嘗試計算模型的外鍵項目/記錄,並將其顯示爲Admin list_display中的列。
所以我有一個模型「作者」,作爲模型「書」的外鍵。
這裏的models.py:
class Author(models.Model):
name = models.CharField(
max_length=100,
)
class Meta:
ordering = ['-name ']
verbose_name = _('Author')
verbose_name_plural = _('Authors')
def __str__(self):
return self.author
@models.permalink
def get_absolute_url(self):
return reverse('author_detail', kwargs={'pk': self.pk})
class Book(models.Model):
author = models.ForeignKey(
'Author',
related_name='menu_items',
verbose_name=_('author'),
)
bookname= models.CharField(
max_length=100,
)
publisher= models.CharField(
max_length=100,
)
class Meta:
ordering = ['-bookname']
verbose_name = _('Book')
verbose_name_plural = _('Books')
def __str__(self):
return self.bookname
@models.permalink
def get_absolute_url(self):
return ('book_detail', [self.pk])
這裏的admin.py
from django.contrib import admin
from .models import Author, Book
class BookInline(admin.TabularInline):
model = Book
extra = 1
@admin.register(Author)
class LibraryAdmin(admin.ModelAdmin):
def NumberOfBooks(self, obj):
#I guess sth is wrong here when trying to count the book_set
return obj.book_set.count()
NumberOfBooks.short_description = "Books Count"
list_display = ['bookname', 'publisher', 'NumberOfBooks']
inlines = [BookInline]
我要統計每個作者有多少本書中寫道,並顯示像這樣的的第二級管理頁面首頁>作者>作者:
Author | Books Count
Someone1 NumberOfBooks
Someone2 NumberOfBooks
Someone3 NumberOfBooks
Someone4 NumberOfBooks
但是我得到的錯誤:錯誤
'Author' object has no attribute 'book_set'
1.我要做這obj.book_set.count()? 我以爲obj.book_set
會在同一個「作者」(obj)下提到「書」,聽起來像我誤解了它,但我不知道如何實現我的意圖。
2.相反,如果我想爲'作者'添加一個字段來自動統計與每個作者有關的「書」數量,這應該是一個更好的方法,那麼該怎麼做?
' 錯誤::(admin.E108)'list_display [3]'的值是指'books_count',它不是可調用的,'LibraryAdmin ',或'作者。作者'的屬性或方法.' –
這就是我得到的錯誤,我現在很困惑... 順便說一下'@admin.register(Loan)'應該是'@admin .register(作者)',我輸入錯了,但這不是問題,例如爲了讓我更容易理解,我改了一些名字。 –
我最後加入得到這個工作: '高清show_books_count(自我,研究院): \t \t回inst.books_count \t list_display = [ 'BOOKNAME', '發行人', 'show_books_count']' 但你能解釋一下爲什麼這個工作和'(self,inst)'做了什麼?可以簡化並添加到'def get_queryset'中? –