Django 不保存选择字段

问题描述 投票:0回答:1

我尝试保存选择字段,但无缘无故字段永远不会保存。我尝试创建模型表单,甚至在管理面板中该字段也不会保存。

我想为用户提供选择何时获得电子邮件推荐的选项。

也许有人知道出了什么问题。我看到了 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})
django django-models django-forms
1个回答
0
投票

在您的 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'
© www.soinside.com 2019 - 2024. All rights reserved.