2017-10-14 13 views
0

私は数週間この頭を叩いていましたが、私はModelFormを動作させることに決めました! ModelFormから受け取ったデータを使ってPOSTを処理すると、データベースから元のレコードを取得し、元のレコードを 'インスタンス'として使用して新しいフォームを作成する必要があることを理解しています。これは以下のようにdocumented in the Django docsです:Django ModelFormからレコードIDを取得する方法

>>> from myapp.models import Article 
>>> from myapp.forms import ArticleForm 

# Create a form instance from POST data. 
>>> f = ArticleForm(request.POST) 

# Save a new Article object from the form's data. 
>>> new_article = f.save() 

# Create a form to edit an existing Article, but use 
# POST data to populate the form. 
>>> a = Article.objects.get(pk=1) 
>>> f = ArticleForm(request.POST, instance=a) 
>>> f.save() 

この例では、彼らが探しているレコードのPKが1であることを知っているが、あなたはrequest.POSTからデータを読んでいる場合はどのようにあなたがPKを知っていますか、以前に画面に書いたデータに基づいてPOSTが行われているとします。 ModelFormはpkを保存しません。だから、どこからこれを選ぶのですか?それがなければ、(上記の 'a'のように)どのレコードをDBから引き出すのかをどのように知っていますか?

ありがとうございます!

ベン

+2

あなたはたとえば、URLを通して、あなたのビューに渡すことができます。/articles/update/1/ – efkin

答えて

1

あなたはあなたのビューに引数を渡すためにURLでnamed groupsを使用することができます。

あなたのようなURLを持っているのであれば:

url(r'^articles/update/(?P<article_id>[0-9]+)/$', views.update_article) 

あなたはあなたのビューで使用することもできます

def update_article(request, article_id=None): 
    pass 
+0

ありがとう、@efkin。それはうまくいった! 1つの小さな変更点は、次の正規表現を使用したことです。[0-9] *これにより、ユーザーは記事IDなしでページにアクセスして新しい記事を追加できます。 – Ben

関連する問題