Я написал фрагмент кода, в котором пользователь может выбрать профессию из поля выбора (учитель, врач, пилот и т. Д. c), и если его профессия отсутствует в списке, он может выбрать «другое», а затем напишите их занятие в текстовом поле ниже.
Я могу успешно определить, выбрали ли они «другое» из выпадающего списка, но не могу понять, как заполнить поле «занятие» данными из поля «другое» .
if request.method == 'POST':
form = OccupationForm(request.POST, request.FILES, instance=request.user.occupation)
if form.is_valid():
# if user selected 'other' - get input from text field
if form['occupation'].value() == 'other':
# this doesnt work
#form_data = self.get_form_step_data(form)
#form.other = form_data.get('other', '')
#form.save()
return redirect('#')
#form.save()
#return redirect('#')
else:
form = OccupationForm(instance=request.user.occupation)
Спасибо.
РЕДАКТИРОВАТЬ: сокращенные models.py
class Occupation(models.Model):
# I just realized, maybe this should be OneToManyField ??
user = models.OneToOneField(User, on_delete=models.CASCADE)
OCCUPATIONS = (
('teacher', 'Teacher'),
('doctor', 'Doctor'),
('other', 'Other'),
)
occupation = models.CharField('What is your job?', max_length=200, null=True, choices=OCCUPATIONS)
сокращенные forms.py
class OccupationsForm(forms.ModelForm):
other = forms.CharField(required=False, label='')
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get('occupations') == 'other':
cleaned_data['occupations'] = cleaned_data.get('other')
return cleaned_data
class Meta:
model = Occupations
fields = ['occupations']
Спасибо