我有两个类:作者和书.我希望类作者有一个属性,其中包含所述作者编写的所有书籍,在Books类中引用为外键.我所做的方法似乎没有用,我假设是因为在迁移中创建数据库时,还没有Books对象存在.或者我相信,我对django很新.
class Author(models.Model): AuthorName = models.CharField(max_length=255, unique=True) books = Book.objects.get(pk=object_instance.pk) class Book(models.Model): BookName = models.CharField(max_length=255) Author = models.ForeignKey('Author')
我得到的错误信息是:
NameError: name 'Book' is not defined
我得到的,是因为我引用了另一个类而没有实际拥有该类的实例.我只是无法找到一个正确的方法来做到这一点.
编辑:我重新格式化它是这样的:
class Author(models.Model): AuthorName = models.CharField(max_length=255, unique=True) books = author.book_set.all() class Book(models.Model): BookName = models.CharField(max_length=255) Author = models.ForeignKey('Author')
产生错误:
NameError: name 'author' is not defined
也许我应该在视图中查询稍后需要的数据点,而不是在模型中为它们创建自己的字段.
编辑2:答案的解决方案:
所以我的错误一直是尝试在作者表中添加"books"字段.我想那时候没办法做到这一点.我可以让这个方法在视图中工作,所以我想这有点解决了,虽然不是我最初打算这样做的方式.
干
class Author(models.Model): AuthorName = models.CharField(max_length=255, unique=True) class Book(models.Model): BookName = models.CharField(max_length=255) Author = models.ForeignKey('Author')
然后在视图中执行此操作:
author = Author.objects.get(pk=1) books = author.book_get.all()
产生想要的结果(我之前已经知道了,但我试图在模型中实现一个书籍领域,如果我正确理解的话,至少不能用这种方法).
另一种方案:
class Author(models.Model): AuthorName = models.CharField(max_length=255, unique=True) class Book(models.Model): BookName = models.CharField(max_length=255) Author = models.ForeignKey(Author, related_name = "books")
Anush Devend.. 12
您无需在Authors
模型中创建单独的字段
class Author(models.Model): AuthorName = models.CharField(max_length=255, unique=True) class Book(models.Model): BookName = models.CharField(max_length=255) Author = models.ForeignKey('Author')
您可以获得特定作者的所有书籍:
author = Author.objects.get(id=1) books = author.book_set.all()
了解更多关于落后的关系,在这里
您无需在Authors
模型中创建单独的字段
class Author(models.Model): AuthorName = models.CharField(max_length=255, unique=True) class Book(models.Model): BookName = models.CharField(max_length=255) Author = models.ForeignKey('Author')
您可以获得特定作者的所有书籍:
author = Author.objects.get(id=1) books = author.book_set.all()
了解更多关于落后的关系,在这里
只需将其添加related_name
到ForeignKey中,您就可以获取作者编写的所有书籍。
例如:
class Book(models.Model): ... author = models.ForeignKey('Author', related_name='books') ...
然后...
author = Author.objects.get(pk=1) books = author.books.all()