【发布时间】:2017-04-09 09:25:34
【问题描述】:
我是 Python 和 Django 的新手。
我试图计算模型的外键项/记录,并将其显示为 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]
我想统计每个作者写了多少本书,并在管理页面的第二级显示如下Home>Authors>Author:
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。相反,如果我想在“作者”中添加一个字段,该字段将自动计算与每个作者相关的“书”的数量,这应该是一种更好的方法吗?该怎么做?
【问题讨论】:
标签: python django count foreign-keys django-admin