Django Admin ForeignKey问题,

wf82jlnq  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(131)

以下是我在Django中的模型。

class Authors(models.Model):
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    total_books = models.IntegerField(default =0)

class Book(models.Model):
    title = models.CharField(max_length=200)
    topic = models.CharField(max_length=200)
    author = models.ForeignKey(Authors, on_delete = models.CASCADE)`

字符串
我想用Admin平台实现:当我添加一本新书时,相关作者中的total_books将增加1。有什么办法解决吗?
如果有人帮我,我会把它拿走的。
有人能给予我一些想法吗?

blmhpbnm

blmhpbnm1#

您应该添加一个方法来执行此操作。您的方法导致向数据库写入的数据比需要的多。你甚至可以选择一个属性:

class Authors(models.Model):
    ...
    @property
    def book_count(self):
        return self.book_set.count()

字符串
带有<object>_set的语法是django中反向查找的默认实现。搜索'_set' here以查找更多示例。
然后,当你“抓取”一个作者时,你可以很容易地得到book_count,如下所示:

a = Authors.objects.first()
print(a.book_count)

knsnq2tg

knsnq2tg2#

Tarquinius的答案:
如果要在管理面板中显示book_count属性,则应将list_display和readonly_fields添加到ModelAdmin:

class AuthorsAdmin(admin.ModelAdmin):
   list_display = ('your_fields', 'book_count', )
   readonly_fields = ('your_fields', 'book_count', ) # object detail page

admin.site.register(Authors, AuthorsAdmin)

字符串

juzqafwq

juzqafwq3#

您可以在Authors中包含方法来更新计数。

class Authors(models.Model):
    ...
    def get_book_count(self,instance):
        book_count = Book.objects.filter(author__pk=self.pk).count()
        instance.total_books=book_count
        instance.save()

字符串
并在创建图书后使用signals调用此方法。将Author的示例传递给它。

相关问题