当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从django中的模块中的给定字段获取所有引用为ForeignKey的对象》经验,为你挑选了2个好方法。

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

了解更多关于落后的关系,在这里



1> Anush Devend..:

您无需在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()

了解更多关于落后的关系,在这里



2> r_j..:

只需将其添加related_name到ForeignKey中,您就可以获取作者编写的所有书籍。

例如:

class Book(models.Model):
    ...
    author = models.ForeignKey('Author', related_name='books')
    ...

然后...

author = Author.objects.get(pk=1)
books = author.books.all()


应该是all()
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有