我有两个类:作者和书。我希望类作者有一个属性,其中包含所述作者编写的所有书籍,在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:答案的解决方案:
所以我的错误一直是试图添加"书籍#34;作者表中的字段。我想那时候没办法做到这一点。我可以让这个方法在视图中工作,所以我想这有点解决了,虽然不是我最初打算这样做的方式。
操作
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")
答案 0 :(得分:8)
您无需在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()
详细了解落后关系here
答案 1 :(得分:5)
只需将related_name
添加到ForeignKey,您就可以获得作者制作的所有图书。
例如:
class Book(models.Model):
...
author = models.ForeignKey('Author', related_name='books')
...
以后......
author = Author.objects.get(pk=1)
books = author.books.all()
答案 2 :(得分:2)
你做了一些奇怪的事情
books = Book.objects.get(pk=object_instance.pk)
删除它。您将可以使用author.book_set
。您还可以使用related_name
的{{1}}参数。
在此查看详细信息:https://docs.djangoproject.com/en/1.9/ref/models/fields/#foreignkey