我尝试保存选择字段,但无缘无故字段永远不会保存。我尝试创建模型表单,甚至在管理面板中该字段也不会保存。
我想为用户提供选择何时获得电子邮件推荐的选项。
也许有人知道出了什么问题。我看到了 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'