1

djangobook online の第 5 章http://www.djangobook.com/en/2.0/chapter05/に従っています。発行元、作成者、書籍を含む書籍モデルがあります。しかし、出版社や著者との一対多、多対多の複雑な関係を含むブックモデルのデータを追加する方法について言及していなかったようで、私は自分でそれをやろうとしましたが、いくつかの問題がありました.

ブックモデル:

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

これは出版社です:

p = Publisher.objects.get(id=1)

これは著者です:

a = Author.objects.get(id=1)

このリンクhttps://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/によると、最初に本を作成し、後で著者を追加することにしました。

b = Book(title='Django for dummy', publisher=p, datetime.datetime.now())

エラーが発生しました: SyntaxError: キーワード arg の後にキーワード argがありません

誰かが私に正しい方法を教えてもらえますか? ありがとう

4

2 に答える 2

3

Python では、キーワード引数の前に位置引数を配置する必要があります。publication_date=datetime.datetime.now()引数を渡しながら行う。

于 2012-09-17T06:58:08.130 に答える
2

あなたの電話は次の形式です

b = foo(bar="test", "baz")

そんなことはできません。foo が次のように定義されていると想像してください

def foo(size, weight, bar):
...

Python が呼び出そうとしてもfoo、できません。私の例では、Python はどのパラメーターに割り当てるかを知ることができない"baz"ためです。weightキーワード arg (bar="test"またはキーワードと値を持つもの) を使い始めて以来、位置が何の意味も持たなくなったからではありません。それは 2 番目の引数であるため、に割り当てることができ"baz"ますweightが、それは最初の引数であることを意味し、sizeそうではないことを明示的に述べています。

このようなオブジェクトを構築するときは、基本的にキーワード引数を使用するだけです。

このエラーは、すべての引数をキーワードにするか、すべて位置引数にするか、位置引数を最初に配置することで一般的に修正できます。私はこれらの最初のことをします:

b = Book(title='Django for dummy', publisher=p, publication_date=datetime.datetime.now())
于 2012-09-17T06:57:29.877 に答える