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)

作成者がエントリの作成者ではない場合、エラーが発生します。

これを行うためのより簡単な方法は何ですか? 最終的には、著者がそのエントリの著者であるかどうかの質問に対する yes/no の回答が必要です。答えがノーの場合、エラーではなく有効なオブジェクトが必要です。

ありがとう!

4

5 に答える 5

2

質問の仕様によると:

  1. 最終的には、著者がそのエントリの著者であるかどうかの質問に対する yes/no の回答が必要です。

    exists()を使用する

    ドキュメントから:

    QuerySet に結果が含まれている場合は True を返し、含まれていない場合は False を返します。これは、可能な限り簡単で高速な方法でクエリを実行しようとしますが、通常の QuerySet クエリとほぼ同じクエリを実行します。

    エラーは発生しません。ステートメント内で使用できるTrue程度に戻ります。次のようなものを試すことができます:Falseif

    if Entry.objects.filter(pk=entry_id, authors=author).exists():
        # Magic here
    

    メソッドfilter()の代わりに使用しているget()ことに注意してください( ではなくオブジェクトを返します)exists()QuerySetget()QuerySet

  2. 答えがノーの場合、エラーではなく有効なオブジェクトが必要です。

    @nabucosound アプローチを使用することは、あなたが望むものかもしれません。

于 2012-12-15T21:30:14.910 に答える
1

あなたは「有効なオブジェクト」が欲しいと言っているので、それを使って何かを実行するにはこのオブジェクトが必要だと思います。したがって、オブジェクトの欠如は、他の何かを実行することを運ぶはずですよね?このシナリオでDjangoORMを使用して行われる最も一般的な検証は、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 に答える