1

Django doc では、Model AutoField は ModelForm で構築されたフォームでは表現されないことが言及されています。

そのフォームを編集して保存するとき、フォーム データをデータベースに正しく保存するには、基礎となる AutoField id 値をどのように知る必要がありますか?

編集フォームに隠しフィールドを挿入して、どの行が編集されたかを知ることができることは知っていますが、Django がその隠しフィールドやその他のメカニズムを自動的に管理する方法はありますか?

どうもありがとう

エティエンヌ

4

2 に答える 2

4

instance=<>これは、 を使用しているときにパラメーターを指定することによって行いますModelForm。詳細については、こちらのドキュメントを参照してください

作成/更新ビューの使用例:

def myview(request, id=None):
    if id:
        obj_to_edit = MyModel.objects.get(id=1)
        form = MyForm(instance=obj_to_edit)
    else:
        obj_to_edit = None
        form = MyForm()

    if request.method == 'POST':
        if id: #update
            form = MyForm(request.POST, instance=obj_to_edit)
        else: #create
            form = MyForm(request.POST)

    #rest of the code

URL は次のようになります。

url(r'/blah/create/', 'myview'),
url(r'/blah/edit/(?P<id>[\d+])/', 'myview')

これで、django は、新しいオブジェクトを作成するのではなく、編集する必要があることを理解しました。

forms.Formまた、を使用している場合は、一意のフィールドを手動でクエリするか、前述のように隠しフィールドを挿入する必要があることに注意してくださいid

于 2013-10-10T15:16:52.317 に答える
2

通常、フォームを編集しているとき、編集したい特定のインスタンスは、主キーまたはスラッグ フィールドのいずれかを使用して URL で識別されます。

www.example.com/model/edit/6/

また

www.example.com/model/edit/object_slug/

次に、そのパラメーターをビューに渡すように urls.py を設定します。ここでは、karthkir によって提供された例を使用します (ここでは例としてプライマリを使用します)。

urls.py

urlpatterns = patterns('',
    url(regex=r'^model/edit/(?P<pk>\d+)/$', 'myapp.views.myview', name='add_customer'),
)

ビュー.py

def myview(request, pk):
    obj_to_edit = MyModel.objects.get(id=pk)
    ...
于 2013-10-10T15:35:45.833 に答える