【发布时间】:2017-06-06 12:26:42
【问题描述】:
django 是否提供了一种方法来验证 django 查询集中的模型类型,例如通过相关对象进行过滤?假设我们有以下模型:
class Person(models.Model):
name = models.CharField(max_length=5)
class Author(models.Model):
name = models.CharField(max_length=25)
class Book(models.Model):
name = models.CharField(max_length=5)
author = models.ForeignKey(Author)
还有
p = Person.objects.all().first()
query = Book.objects.filter(author=p)
过滤所有 auhtor_id 等于给定 person_id (p_id) 的书籍,尽管 Book 指的是作者,而不是人。
当然,避免此类错误是程序员的责任,但这是有可能的。
这发生在 django 1.7 中
【问题讨论】:
-
运行该代码时会发生什么?
-
至少在 django 1.7 中它通过 author_id=p.pk 过滤 Book
-
@pteo 对于维护你的代码的人来说,让它按 id 过滤会更有意义,而不是默认情况下,这在版本之间显然是不一致的。请记住,这两个模型甚至一开始就没有关系。
-
这是怎么工作的?! Person 和 Author 是完全不同的模型……!!
-
@Fazil Zaid 不要感到惊讶。不信就试试吧……
标签: python django django-queryset