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'
Вернуться на верх