django是否提供了一种在django queryset中验证模型类型的方法,例如过滤相关对象?假设我们有以下模型:
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
答案 0 :(得分:2)
p = Person.objects.all().first()
query = Book.objects.filter(author=p)
你真的试过这个吗?据我所知,它应该提出一个ValueError
“必须是作者实例”的东西
现在,如果你想避免这个错误,你需要使用一个id,摩西像往常一样有一个很好的答案,显示它是如何完成的。
答案 1 :(得分:0)
如果author_id
与person_id
相同,您可以直接使用ID 过滤:
query = Book.objects.filter(author_id=p.id)