1

我是 Django 的新手。我有一个Author对象 ( author) 和一个条目 ID ( entry_id),我想知道是否authorEntry.

这是Entry

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    authors = models.ManyToManyField(Author)

如果我做

foo = Entry.objects.get(pk=entry_id, authors = author)

当作者不是条目的作者时,我会收到错误消息。

更简单的方法是什么?最终,我只想对作者是否是该条目的作者的问题给出是/否的答案。当答案是否定的时,我想要一个有效的对象而不是错误。

谢谢!

4

5 回答 5

2

根据您的问题规格:

  1. 最终,我只想对作者是否是该条目的作者的问题给出是/否的答案。

    使用存在()

    从文档:

    如果 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

  2. 当答案是否定的时,我想要一个有效的对象而不是错误。

    使用@nabucosound 方法可能是您想要的。

于 2012-12-15T21:30:14.910 回答
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 鼓励这种风格:

http://en.wikipedia.org/wiki/Duck_typing#In_Python

于 2012-12-15T21:54:54.980 回答
0

也许像

entry = Entry.objects.get(pk=entry_id)
author in entry.authors.all()  # True or False
于 2012-12-15T21:28:27.393 回答
0
count = Entry.objects.filter(pk=entry_id, authors = author).count()

if count > 0:
  #The author is an author
于 2012-12-15T21:28:46.600 回答
0

您可以简单地检查 Entry 对象的作者...试试这个

entry = Entry.objects.get(id=entry_id)
is_author = True

try:
   entry.authors.get(id=author.id)
except:
  is_author=False
于 2012-12-15T21:29:21.210 回答