views.generic.CreateView:
class CreateServicesAdForm(forms.ModelForm):
class Meta:
model = models.ServiceAdvert
exclude = ["seller"]
Где seller - это поле в модели ServiceAdvert, внешний ключ на прокси-модель для User. Подразумевается, что seller будет подтягиваться из request.user, а при рендере формы отображаться не будет. Пробовал во вьюхе переопределить get_initial, подставляя request.user туда, но похоже, что раз это поле в форме исключено - то и в initial оно игнорируется. Если в Meta заменить exclude = ["seller"] на fields = "__all__" и указать seller = forms.HiddenInput(), то поле выводится как dropdown (хотя по идее должно бы выводиться как <input type="hidden">). Конечная цель - не давать юзеру возможность выбрать значение поля seller, а заполнять его автоматически, основываясь на request.user. Что я делаю не так, и куда с этим можно копнуть?
Привет, привету пример как у меня реализован Хидден инпут
class LoginForm(forms.Form): d_width = forms.CharField(required=False) d_height = forms.CharField(required=False) def init(self, *args, **kwargs): super(LoginForm, self).init(*args, **kwargs) self.fields['d_width'].widget = forms.HiddenInput() self.fields['d_height'].widget = forms.HiddenInput()
в Шаблоне всё просто {% for field in form %} {{ field }} {% endfor %}
Интересно. Выходит, что если просто в описании формы вписать field_name = forms.HiddenInput(), то оно его игнорирует? х)
if form.is_valid(): obj = form.save(commit=False) obj.seller = request.user obj.save()
ну хз) давно с этим мучался, где-то нарыл такое решение, что нужно пихать в Виджет)
Немного поправлю def form_valid(self, form): obj = form.save(commit=False) obj.seller = self.request.user obj.save()
Ага, вот это больше похоже на то, что мне нужно. Огромное спасибо!
ну да, логичнее решать это на Беке) у меня лиш решение с ХидденИнпутом)
Обсуждают сегодня