0

イベントモデルに新しいレコードを追加するために送信する前に、django 1.4 で FormPreview を正常に使用してプレビューすることができました。機能性が大好きです。

これが私がこれを行う方法です:

#urls.py
url(r'^addevent/', EventFormPreview(EventForm)),

#views.py 
class EventFormPreview(FormPreview):
  def done(self, request, cleaned_data):
    pdb.set_trace()
    new_event = Event(**cleaned_data)
    new_event.user = request.user
    new_event.save()
    return render_to_response("event/thanks.html",
                              {'cleandata': cleaned_data,},
                              context_instance=RequestContext(request),
                              )

ここで、ビューに同様の editevent() を作成し、同じプレビュー プロセスと最終的な送信を行いたいと考えています。唯一の違いは、編集しようとしているデータがフォームに事前入力されることです。最小限のコードを記述し、既存のプレビュー フローを利用してこれを行うにはどうすればよいですか? urls.py 部分は次のようになります

 url(r'^(?i)editevent/(?P<id>\d+)/$', EditEventFormPreview(EventForm)),

EventFormPreview() で init() を再定義し、そこにデータをロードする必要があると思います。これを行う方法を教えてください..

4

1 に答える 1

1

一度だけ、誰も私の質問に答えてくれなくてよかったです。

だからここに私が望むものを手に入れた方法があります.

をオーバーライドしparse_params()てレコード ID を取得し、次に をオーバーライドしget_initial()てフォームにデータを入力します。次に、 でdone()古いレコードを表示し、 で更新しcleaned_dataます。

class EditEventFormPreview(FormPreview):
def parse_params(self, *args, **kwargs):
    self.state["recordid"] = kwargs["id"]
    pass

def get_initial(self, request):
    ob = Event.objects.filter(pk=self.state["recordid"]).values()[0]
    return ob

def done(self, request, cleaned_data):
    new_event = Event.objects.get(pk=self.state["recordid"])
    for (key, value) in cleaned_data.items():
        setattr(new_event, key, value)
    new_event.user = request.user
    new_event.save()
    return render_to_response("event/thanks.html",
                              {'cleandata': cleaned_data,},
                              context_instance=RequestContext(request),
                              )
于 2013-01-21T04:00:06.257 に答える