gpt4 book ai didi

python - 如何从 Django 模块中的给定字段中获取引用为 ForeignKey 的所有对象

转载 作者:太空狗 更新时间:2023-10-30 00:24:08 27 4
gpt4 key购买 nike

我有两个类:作者和书籍。我希望 Authors 类有一个属性,其中包含该作者所写的所有书籍,在 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

也许我应该稍后在 View 中查询我需要的数据点,而不是在模型中为它​​们创建自己的字段..

编辑 2:答案的解决方案:

所以我一直以来的错误是试图在作者表中添加“书籍”字段。我想那时没有办法做到这一点。我可以让该方法在 View 中工作,所以我想这已经解决了,尽管不是我最初计划的那样。

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')

然后在 View 中执行此操作:

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")

最佳答案

您不需要在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

关于python - 如何从 Django 模块中的给定字段中获取引用为 ForeignKey 的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com