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
некоторые другие атрибуты уровня запроса, делающие его доступным для будущего использования.