2

モデルの1つのフィールドに自動的に入力したいのですが。クライアントIPを保持します。

CreateViewを次のように定義しました。

class MyView(CreateView):

  def post(self, request, *args, **kwargs):
    self.form_class.client_ip = request.META.get('REMOTE_ADDR')
    super(MyView, self).post(request, *args, **kwargs)

  model = MyModel   
  form_class = MyForm

そしてそのようにMyForm:

class MyForm(forms.ModelForm):
  class Meta:
    model = MyModel
    exclude = ('ip',)

そして、私はこの除外されたフィールドを埋める方法がわかりません。

4

2 に答える 2

1

フォームの初期値を(辞書として) 返すMyViewメソッドを追加する必要があります。get_initial例えば:

def get_initial(self):
    return { 'ip': ... }

これらの初期値は、フォームの作成時に使用されます。

于 2012-06-30T09:49:33.893 に答える
0

除外されたフィールドは手動で入力する必要があります。request.POSTdict に追加できるミドルウェア プロセッサを調べることができ、[最初にスーパーを呼び出す] をオーバーライドしてから、モデルのフィールドを設定__init__できます。ミドルウェア プロセッサは、他の要求レベルの属性に追加して、将来使用できるようにすることもできます。MyFormipPOST

于 2012-06-30T19:48:10.863 に答える