我知道如何用注释来计数(在我看来),但是我想在模型中做同样的事情(这样会更可重用)。
例如(我从django文档中举个例子),我有这个模型:
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
class Publisher(models.Model):
name = models.CharField(max_length=300)
class Book(models.Model):
name = models.CharField(max_length=300)
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
rating = models.FloatField()
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
pubdate = models.DateField()
class Store(models.Model):
name = models.CharField(max_length=300)
books = models.ManyToManyField(Book)
我可以在视图中使用它:
from django.db.models import Count
pubs = Publisher.objects.annotate(num_books=Count('book'))
但是我该如何在模型中做到这一点? 我知道这个问题很基本(可能),但是我在django中是个新手。 感谢您的回答!
答案 0 :(得分:1)
您可以使用自定义管理器:
newT = interp(t ,[minVal,maxVal],[converedMinVal,converedMaxVal])
value = math.sin(newT * math.pi / 2)
print value,'value'
现在您可以这样称呼它:
class BookManager(models.Manager):
def get_queryset(self):
return super().get_queryset().annotate(num_books=Count('book'))
class Publisher(models.Model):
name = models.CharField(max_length=300)
books = BookManager()
您将拥有pubs = Publisher.books.all()
和对象。
答案 1 :(得分:0)
您可以为此使用 classmethod 。
class Publisher(models.Model):
...
@classmethod
def get_book_count(cls):
return cls.objects.annotate(num_books=Count('book'))
您可以将此方法称为
pubs = Publisher.get_book_count()
编辑-还可以通过@ Navid2zp查看答案,这可能对您来说是一个更好的解决方案。