Скрытое поле, которое возвращает модель? Итак, идентификатор экземпляра модели?
forms.HiddenInput
виджет должен сделать трюк, на поле FK или CharField вы поставите ли экземпляр модели идентификатор.
class MyForm(forms.Form):
hidden_2 = forms.CharField(widget=forms.HiddenInput())
hidden_css = forms.CharField(widget=forms.MostWidgets(attrs={'style': 'display:none;'}))
Я полагаю, что самый быстрый способ получить эту работу является
class MyForm(forms.Form):
model_instance = forms.ModelChoiceField(queryset=MyModel.objects.all(), widget=forms.HiddenInput())
form = MyForm({'model_instance': '1'})
form.cleaned_data['model_instance']
Но мне не нравится идея поставки MyModel.objects.all(), если вы собираетесь указать один элемент в любом случае.
Похоже, чтобы избежать такого поведения, вам придется переопределить форму __init__
с меньшим QuerySet
.
Я думаю, что я предпочитаю по старинке:
class MyForm(forms.Form):
model_instance = forms.CharField(widget=forms.HiddenInput())
def clean_model_instance(self):
data = self.cleaned_data['model_instance']
if not data:
raise forms.ValidationError()
try:
instance = MyModel.objects.get(id=data)
except MyModel.DoesNotExist:
raise forms.ValidationError()
return instance
Не думает, что 'ForeignKey' является действительным полем формы ... это поле модели. Я бы предпочел, чтобы он возвращал экземпляр модели, а не целое число (когда я получаю его позже с помощью 'form.cleaned_data ['field']') – mpen
Ха-ха, вы абсолютно правы .. извините за это :) –
forms.MostWidgets ? что означает большинство доступных виджетов? – fanny