Django не сохраняет поле выбора
Я пытаюсь сохранить поле выбора, но оно почему-то не сохраняется. Я пытаюсь создать модельную форму и даже в панели администратора это поле не сохраняется.
Я хочу предоставить пользователю возможность выбирать, когда он хочет получать рекомендации по электронной почте.
Может быть, у кого-то есть идеи, что не так. Я смотрю документацию по django и все равно не понимаю, почему это не сохраняется.
Моя модель:
class Profile(models.Model):
DAILYDIGEST = 'DAILY'
WEEKLYDIGEST = 'WEEKLY'
NONERECOMMENDATION = 'NONEREC'
EMAILDIGEST = [
(NONERECOMMENDATION, 'Nie wysyłaj mi rekomendacji'),
(DAILYDIGEST, 'Dzienne rekomendacje'),
(WEEKLYDIGEST, 'Cotygodniowe rekomendacje'),
]
[...]
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, verbose_name='Użytkownik')
[...]
emailrecommendation = models.CharField(
verbose_name='Wybierz jak często chcesz otrzymywać rekomendacje',
max_length=20,
choices = EMAILDIGEST,
default = WEEKLYDIGEST,
)
Форма модели:
class EmailRecommendations(ModelForm):
class Meta:
model = Profile
fields = ['emailrecommendation']
Вид:
def emailrecsettings(request):
if request.method == 'POST':
form = EmailRecommendations(instance=request.user.profile, data=request.POST)
if form.is_valid():
formsave = form.save()
print(formsave)
else:
form = EmailRecommendations(instance=request.user.profile)
return render(request, 'profile/emailrecommendations.html', {'form': form})
В классе ModelForm, определите forms.ChoiceField, чтобы сделать выбор доступным в поле формы:
class EmailRecommendations(ModelForm):
class Meta:
emailrecommendation = forms.ChoiceField(widget = forms.Select(),
choices = Profile.EMAILDIGEST ,
initial='NONERECOMMENDATION',
required = True,)
model = Profile
fields = ['emailrecommendation']
или
widgets = {
'emailrecommendation ' : forms.Select()
}
Другой способ - динамически изменять значение перед рендерингом.
# In request def
def emailrecsettings(request):
FormInstance = EmailRecommendations()
FormInstance.fields['emailrecommendation'].choices = Profile.EMAILDIGEST,
FormInstance.fields['emailrecommendation'].initial = 'NONERECOMMENDATION'