Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django计数对象字段_Python_Django_Django Models - Fatal编程技术网

Python Django计数对象字段

Python Django计数对象字段,python,django,django-models,Python,Django,Django Models,我需要创建一个字段来计算每个图书馆的注册图书数量 每一本书都由一位外国人与图书馆联系在一起 如果我注册或删除一本书,它应该会在与您自己的图书馆相关的“book_count”字段中自动更新 库/模型.py from django.db import models class Libraries(models.Model): name = models.CharField(max_length=50) book_count = models.IntegerField(default

我需要创建一个字段来计算每个图书馆的注册图书数量

每一本书都由一位外国人与图书馆联系在一起

如果我注册或删除一本书,它应该会在与您自己的图书馆相关的“book_count”字段中自动更新

库/模型.py

from django.db import models

class Libraries(models.Model):
    name = models.CharField(max_length=50)
    book_count = models.IntegerField(default=0)

    def __str__(self):
        return self.name
from django.db import models

from libraries.models import Libraries

class Books(models.Model):
    library = models.ForeignKey(Libraries, on_delete=models.DO_NOTHING, blank=True, null=True)
    book = models.CharField(max_length=200, null=True, blank=True)

    def __str__(self):
        return self.book
books/models.py

from django.db import models

class Libraries(models.Model):
    name = models.CharField(max_length=50)
    book_count = models.IntegerField(default=0)

    def __str__(self):
        return self.name
from django.db import models

from libraries.models import Libraries

class Books(models.Model):
    library = models.ForeignKey(Libraries, on_delete=models.DO_NOTHING, blank=True, null=True)
    book = models.CharField(max_length=200, null=True, blank=True)

    def __str__(self):
        return self.book

如何在每个图书馆的模型中创建这个简单的图书计数器?

给定以下应用程序

$ tree -L 2
.
├── db.sqlite3
├── libraryapp
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── migrations
│   ├── models.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py    
还有你的模型(我做了一点重构)

您可以按如下方式计算某个图书馆的图书数量:

$ python3 manage.py shell
>>> from libraryapp.models import Book, Library
>>> library = Library.objects.first()
>>> library.book_count
1

请注意,这假设更新图书馆图书数量的唯一方法是添加或删除图书。

给定以下应用程序

$ tree -L 2
.
├── db.sqlite3
├── libraryapp
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── migrations
│   ├── models.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py    
还有你的模型(我做了一点重构)

您可以按如下方式计算某个图书馆的图书数量:

$ python3 manage.py shell
>>> from libraryapp.models import Book, Library
>>> library = Library.objects.first()
>>> library.book_count
1

请注意,这假设更新库的图书数量的唯一方法是添加或删除一本书。

我是通过信号获得的

@receiver(post_save, sender=Book)
def add_book_count(instance, created, **kwargs):
    if created:
        instance.library.book_count += 1
        instance.library.save()


@receiver(post_delete, sender=Book)
def rem_statement_count(instance, **kwargs):
    instance.library.book_count -= 1
    instance.library.save()

我是通过信号得到的

@receiver(post_save, sender=Book)
def add_book_count(instance, created, **kwargs):
    if created:
        instance.library.book_count += 1
        instance.library.save()


@receiver(post_delete, sender=Book)
def rem_statement_count(instance, **kwargs):
    instance.library.book_count -= 1
    instance.library.save()


对于大多数上下文,我都会使用模型名称库。你还有一个循环导入。这是否回答了你的问题?我解决了循环模型问题,但计数器不工作。我编辑了这篇文章以使其更简单。我仍然可以从书籍中看到
。模型导入书籍现在没有错误消息。但是我需要知道如何在每个库的模型中创建一个用于图书计数的字段?我会在大多数上下文中使用模型名称库。你还有一个循环导入。这是否回答了你的问题?我解决了循环模型问题,但计数器不工作。我编辑了这篇文章以使其更简单。我仍然可以从书籍中看到
。模型导入书籍现在没有错误消息。但是我需要知道如何在每个库的模型中创建一个用于图书计数的字段?我不能进行重构。我已经完成该项目,这将是一个非常困难的变化。“book_count”必须位于libreries/models.py字段中。它将在数据库中注册。您可以将
book\u count
设置为属性。请参阅上面的编辑。但您从Library类中排除了“book_count”字段。没用。因为我需要整数字段由图书计数自动完成/编辑。这很公平。请看我的编辑上面。请注意,我觉得这种设计不太优雅,但考虑到我不知道应用程序的其他部分,这可能是必要的。我是通过信号获得的。我无法进行重构。我已经完成该项目,这将是一个非常困难的变化。“book_count”必须位于libreries/models.py字段中。它将在数据库中注册。您可以将
book\u count
设置为属性。请参阅上面的编辑。但您从Library类中排除了“book_count”字段。没用。因为我需要整数字段由图书计数自动完成/编辑。这很公平。请看我的编辑上面。请注意,我觉得这种设计不太优雅,但考虑到我不知道应用程序的其他部分,这可能是必要的。我是通过信号获得的。