如何使用管理器查询外键,然后检索连接到外键的对象?
这是我的models.py:
from django.db import models
# Create your models here.
class BookManager(models.Manager):
def title_count(self,keyword):
return self.filter(title__icontains=keyword).count()
class CategoryManager(models.Manager):
def category_count(self):
return self.filter(category__icontains=python).count()
class Category(models.Model):
title=models.CharField(max_length=20)
def __str__(self):
return self.title
class Enquiry(models.Model):
title=models.CharField(max_length=200)
category=models.ForeignKey(Category ,default=False,blank=False)
detail=models.TextField()
objects = BookManager()
objects=CategoryManager()
# tags=models.ChoiceField()
def __str__(self):
return self.title
我尝试使用类别管理器,但它给了我一个奇怪的错误。 我只想知道我们如何能够获得与类别foriegn-key相关联的对象,并将它们显示为用户列表。
答案 0 :(得分:0)
您可以将 title_count 和 category_count 方法合并到一个管理器下。通过 ForeignKey 进行过滤时,您的字段查找需要指定您尝试过滤的字段的名称,否则它会假设您查询 ID 字段。因此,您可以执行 category__title__icontains ,而不是 category__icontains 。
另一个注意事项,在较新版本的 Django 中,您需要在定义 ForeignKey 时指定 on_delete 参数。
这是我认为您正在尝试完成的工作示例。
class BookManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count()
def category_count(self, keyword):
return self.filter(category__title__icontains=keyword).count()
class Category(models.Model):
title = models.CharField(max_length=20)
def __str__(self):
return self.title
class Enquiry(models.Model):
title = models.CharField(max_length=200)
category = models.ForeignKey(Category,
default=False,
blank=False,
on_delete=models.CASCADE)
detail = models.TextField()
books = BookManager()
# tags=models.ChoiceField()
def __str__(self):
return self.title
以下是您将如何使用它:
Enquiry.books.category_count('python')
Enquiry.books.title_count('test')