django ModelForm без всех полей - заполните их автоматически

Я хотел бы заполнить одно поле моей модели автоматически. Он содержит 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 ответа

В MyView Вы должны добавить метод с именем get_initial который возвращает начальные значения формы (в виде словаря). Например:

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

Эти начальные значения затем используются при создании формы.

Исключенные поля должны быть заполнены вручную. вы можете посмотреть на промежуточные процессоры, которые могут добавить к request.POST диктовать, и вы можете переопределить __init__ на MyForm, [сначала вызовите супер], а затем установите модель ip поле. процессор промежуточного программного обеспечения также может добавить к POST некоторые другие атрибуты уровня запроса, делающие его доступным для будущего использования.

Другие вопросы по тегам