2

我想自动填充模型的一个字段。它拥有一个客户端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__on MyForm, [first call super] 然后设置模型的ip字段。中间件处理器还可以添加POST一些其他请求级别的属性,使其可供将来使用。

于 2012-06-30T19:48:10.863 回答