Django查询多个字段
我正在创建一个简单的django项目,该项目处理书籍和作者姓名的存储以及待阅读列表的存储(TBR)。TBR表与books表的连接方式为多对多 现在,我对如何查询特定TBR中的书籍列表感到困惑 我编写的代码如下:Django查询多个字段,django,django-models,django-queryset,Django,Django Models,Django Queryset,我正在创建一个简单的django项目,该项目处理书籍和作者姓名的存储以及待阅读列表的存储(TBR)。TBR表与books表的连接方式为多对多 现在,我对如何查询特定TBR中的书籍列表感到困惑 我编写的代码如下: class BookManager(models.Manager): def is_read(self): return self.filter(read='y') def is_not_read(self): return self.f
class BookManager(models.Manager):
def is_read(self):
return self.filter(read='y')
def is_not_read(self):
return self.filter(read='n')
class Genre(models.Model):
name = models.CharField(max_length=200, help_text='Enter a book genre (e.g. Science Fiction)')
def __str__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=100, help_text="Enter first name of the author",default="Unknown")
last_name = models.CharField(max_length=100, help_text="Enter last name of the author",default="Unknown")
def __str__(self):
return f'{self.first_name} {self.last_name}'
class Book(models.Model):
YES = 'y'
NO = 'n'
DID_READ_CHOICES = [
(YES,'Yes'),
(NO,'No'),
]
title = models.CharField(max_length=100)
author = models.ForeignKey(
Author,
on_delete=models.SET_NULL,
null=True,
related_name='author_books'
)
genre = models.ManyToManyField(Genre, help_text='Select a genre for this book')
summary = models.TextField(max_length=1000, help_text='Enter a brief description of the book',blank=True,null=True)
read = models.CharField(
max_length=1,
choices=DID_READ_CHOICES,
default=NO,
)
objects = BookManager()
class Meta:
ordering = ['title']
def __str__(self):
return self.title
class TBR(models.Model):
title = models.CharField(max_length=100)
book = models.ManyToManyField(
Book,
related_name='in_tbr',
)
class Meta:
ordering = ['title']
def __str__(self):
return self.title
>>> to_be_read = TBR.objects.get(title='TBR1')
>>> for book in to_be_read.book:
... book.title
...
我是Django的新手,我正在参考Django文档,如有任何帮助,将不胜感激
多谢各位
编辑:我尝试了以下操作:
class BookManager(models.Manager):
def is_read(self):
return self.filter(read='y')
def is_not_read(self):
return self.filter(read='n')
class Genre(models.Model):
name = models.CharField(max_length=200, help_text='Enter a book genre (e.g. Science Fiction)')
def __str__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=100, help_text="Enter first name of the author",default="Unknown")
last_name = models.CharField(max_length=100, help_text="Enter last name of the author",default="Unknown")
def __str__(self):
return f'{self.first_name} {self.last_name}'
class Book(models.Model):
YES = 'y'
NO = 'n'
DID_READ_CHOICES = [
(YES,'Yes'),
(NO,'No'),
]
title = models.CharField(max_length=100)
author = models.ForeignKey(
Author,
on_delete=models.SET_NULL,
null=True,
related_name='author_books'
)
genre = models.ManyToManyField(Genre, help_text='Select a genre for this book')
summary = models.TextField(max_length=1000, help_text='Enter a brief description of the book',blank=True,null=True)
read = models.CharField(
max_length=1,
choices=DID_READ_CHOICES,
default=NO,
)
objects = BookManager()
class Meta:
ordering = ['title']
def __str__(self):
return self.title
class TBR(models.Model):
title = models.CharField(max_length=100)
book = models.ManyToManyField(
Book,
related_name='in_tbr',
)
class Meta:
ordering = ['title']
def __str__(self):
return self.title
>>> to_be_read = TBR.objects.get(title='TBR1')
>>> for book in to_be_read.book:
... book.title
...
但出现以下错误:
回溯(最近一次呼叫最后一次):文件“”,第1行,在
TypeError:“ManyRelatedManager”对象不可编辑
您应该使用
book.all()
试试这个
>>> to_be_read = TBR.objects.get(title='TBR1')
>>> for book in to_be_read.book.all():
... book.title
...
您应该使用
book.all()
试试这个
>>> to_be_read = TBR.objects.get(title='TBR1')
>>> for book in to_be_read.book.all():
... book.title
...
让我更好地理解你的问题。您需要根据TBR模型中的“标题”查询图书列表?是的,例如,有一个TBR称为“终身阅读的图书”,现在10本图书中只有7本属于此TBR。现在我只想根据TBR查询这7本书。只是一个建议:最好在TBR的图书模型中创建一个新的类别字段(这样你就可以创建许多你想要的类别,比如“一生阅读的书”,并与书关联,并在此字段中基于ado查询)和一个布尔字段来检查它是否是TBR?告诉我这对你来说是否有意义,因为这样生活会更轻松。如果不是的话,我会提出另一个解决方案。事实上,我是为我的母亲做的,她是一个狂热的读者。她在pinterest上找到了这个TBR,并试图得到所有的PDF。由于没有办法管理,它变成了一个集群。因此,我决定为她做这个,她可以添加她的TBR,并添加所有可用图书列表中的图书。让我更好地理解你的问题。您需要根据TBR模型中的“标题”查询图书列表?是的,例如,有一个TBR称为“终身阅读的图书”,现在10本图书中只有7本属于此TBR。现在我只想根据TBR查询这7本书。只是一个建议:最好在TBR的图书模型中创建一个新的类别字段(这样你就可以创建许多你想要的类别,比如“一生阅读的书”,并与书关联,并在此字段中基于ado查询)和一个布尔字段来检查它是否是TBR?告诉我这对你来说是否有意义,因为这样生活会更轻松。如果不是的话,我会提出另一个解决方案。事实上,我是为我的母亲做的,她是一个狂热的读者。她在pinterest上找到了这个TBR,并试图得到所有的PDF。由于没有办法管理,它变成了一个集群。因此,我决定为她制作这个,她可以添加她的TBR,并添加所有可用图书列表中的图书。非常感谢,它很有效。我在这件事上耽搁了一段时间,非常感谢你,它很管用。我被困在这个问题上有一段时间了