没有所有字段的django ModelForm - 自动填充它们

时间:2012-06-30 09:03:49

标签: python django django-generic-views django-forms

我想自动填充模型的一个字段。它拥有客户端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',)

我不知道如何填补这个被排除在外的领域。

2 个答案:

答案 0 :(得分:1)

MyView中,您应该添加一个名为get_initial的方法,该方法返回表单的初始值(作为字典)。例如:

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

然后在创建表单时使用这些初始值。

答案 1 :(得分:0)

排除的字段必须手动填写。您可以查看可添加到request.POST dict的中间件处理器,您可以覆盖__init__上的MyForm,[首次调用super],然后设置模型的{{1} }字段。 中间件处理器还可以向ip添加一些其他请求级别属性,使其可供将来使用。

相关问题