我是Django的新手。我有一个Author
对象(author
)和一个条目ID(entry_id
),我想知道author
是否是Entry
的作者。
这是Entry
:
class Entry(models.Model):
blog = models.ForeignKey(Blog)
authors = models.ManyToManyField(Author)
如果我这样做
foo = Entry.objects.get(pk=entry_id, authors = author)
如果作者不是某个条目的作者,我会收到错误。
这样做的简单方法是什么?最后,我只想对作者是否是该作品的作者的问题给出是/否答案。当答案为否时,我想要一个有效的对象而不是错误。
谢谢!
答案 0 :(得分:2)
根据您的问题规范:
最终我只是想对作者是否是该作品的作者的问题给出是/否答案。
使用exists()
来自文档:
如果QuerySet包含任何结果,则返回True,否则返回False。 这会尝试以最简单,最快速的方式执行查询 可能,但它确实执行与普通查询几乎相同的查询 QuerySet查询。
它不会引发任何错误,它只返回True
或False
,因此您可以在if
语句中使用它。您可以尝试以下方式:
if Entry.objects.filter(pk=entry_id, authors=author).exists():
# Magic here
请注意,我使用filter()
代替get()
,因为exists()
是QuerySet
方法(get()
返回的对象不是QuerySet
})
如果答案为否,我想要一个有效的对象,而不是错误。
使用@nabucosound方法可能就是您想要的。
答案 1 :(得分:1)
你说你想要一个“有效对象”,所以我假设你需要这个对象来执行它。因此,缺乏对象应该执行其他事情,对吧?对于这种情况,使用Django ORM进行的最常见验证是try / except:
try:
foo = Entry.objects.get(pk=entry_id, authors=author)
except Entry.DoesNotExist:
# Do something when object does not exist
pass
else:
# Do something with your foo object
没有错,事实上,Python鼓励这种风格:
答案 2 :(得分:0)
可能像
entry = Entry.objects.get(pk=entry_id)
author in entry.authors.all() # True or False
答案 3 :(得分:0)
count = Entry.objects.filter(pk=entry_id, authors = author).count()
if count > 0:
#The author is an author
答案 4 :(得分:0)
您可以简单地检查Entry对象的作者...试试这个
entry = Entry.objects.get(id=entry_id)
is_author = True
try:
entry.authors.get(id=author.id)
except:
is_author=False