如何在ModelForm中指定Select和RadioSelect? [英] How to specify Select and RadioSelect in a ModelForm?
问题描述
我正在将调查从 Form
转换为Django 1.6.2中的 ModelForm
。
I am converting a survey from a Form
to a ModelForm
in Django 1.6.2.
任何人都可以告诉我什么是相等的 forms.ChoiceField(widget = forms.Select(),
和 forms.ChoiceField(widget = forms.RadioSelect()
使用 ModelForm
?
Can anyone tell me what is the equal of forms.ChoiceField(widget=forms.Select(),
and forms.ChoiceField(widget=forms.RadioSelect()
using ModelForm
?
我尝试过 widget = models.Select()
或 widget = models.RadioSelect()
错误
AttributeError:'module'对象没有属性'Select'
AttributeError: 'module' object has no attribute 'Select'
AttributeError:'module'对象没有属性'RadioSelect'
AttributeError: 'module' object has no attribute 'RadioSelect'
旧代码
forms.py
class SurveyFormB(forms.Form):
#Do you own a Smartphone?
YES_SMARTPHONE = 'Yes'
NO_SMARTPHONE = 'No'
SMART_PHONE_OWNERSHIP = (
(YES_SMARTPHONE, 'Yes'),
(NO_SMARTPHONE, 'No'),
)
smart_phone_ownership = forms.ChoiceField(widget=forms.RadioSelect(), choices=SMART_PHONE_OWNERSHIP, initial= "", label='Do you own a Smartphone?', required = False)
#If 'Yes' How many hours a day do you access the Internet on it?
SMART_PHONE_LESS_THAN_ONE_HOUR_A_DAY = 'Less than one hour day'
SMART_PHONE_ONE_TO_TWO_HOURS_A_DAY = '1 - 2 Hours a day'
SMART_PHONE_TWO_TO_FOUR_HOURS_A_DAY = '2 - 4 hours a day'
SMART_PHONE_FOUR_TO_SIX_HOURS_A_DAY = '4 - 6 hours a day'
SMART_PHONE_SIX_TO_EIGHT_HOURS_A_DAY = '6 - 8 hours a day'
SMART_PHONE_EIGHT_PLUS_HOURS_A_DAY = '8 + hours a day'
SMART_PHONE_USAGE = (
("", "----------"),
(SMART_PHONE_LESS_THAN_ONE_HOUR_A_DAY, 'Less than one hour a day'),
(SMART_PHONE_ONE_TO_TWO_HOURS_A_DAY, '1 - 2 Hours a day'),
(SMART_PHONE_TWO_TO_FOUR_HOURS_A_DAY, '2 - 4 hours a day'),
(SMART_PHONE_FOUR_TO_SIX_HOURS_A_DAY, '4 - 6 hours a Day'),
(SMART_PHONE_SIX_TO_EIGHT_HOURS_A_DAY, '6 - 8 hours a day'),
(SMART_PHONE_EIGHT_PLUS_HOURS_A_DAY, '8 + hours a day'),
)
smart_phone_usage = forms.ChoiceField(widget=forms.Select(), choices=SMART_PHONE_USAGE, initial= "", label='If Yes, How many hours a day do you access the Internet on it?', required = False)
新代码(不工作)
modules.py
#Do you own a Smartphone?
YES_SMARTPHONE = 'Yes'
NO_SMARTPHONE = 'No'
SMART_PHONE_OWNERSHIP = (
(YES_SMARTPHONE, 'Yes'),
(NO_SMARTPHONE, 'No'),
)
smart_phone_ownership = models.CharField(null=True, max_length=1, widget=models.RadioSelect(), choices=SMART_PHONE_OWNERSHIP, verbose_name='Do you own a Smartphone?')
#If 'Yes' How many hours a day do you access the Internet on it?
SMART_PHONE_LESS_THAN_ONE_HOUR_A_DAY = 'Less than one hour day'
SMART_PHONE_ONE_TO_TWO_HOURS_A_DAY = '1 - 2 Hours a day'
SMART_PHONE_TWO_TO_FOUR_HOURS_A_DAY = '2 - 4 hours a day'
SMART_PHONE_FOUR_TO_SIX_HOURS_A_DAY = '4 - 6 hours a day'
SMART_PHONE_SIX_TO_EIGHT_HOURS_A_DAY = '6 - 8 hours a day'
SMART_PHONE_EIGHT_PLUS_HOURS_A_DAY = '8 + hours a day'
SMART_PHONE_USAGE = (
(SMART_PHONE_LESS_THAN_ONE_HOUR_A_DAY, 'Less than one hour a day'),
(SMART_PHONE_ONE_TO_TWO_HOURS_A_DAY, '1 - 2 Hours a day'),
(SMART_PHONE_TWO_TO_FOUR_HOURS_A_DAY, '2 - 4 hours a day'),
(SMART_PHONE_FOUR_TO_SIX_HOURS_A_DAY, '4 - 6 hours a Day'),
(SMART_PHONE_SIX_TO_EIGHT_HOURS_A_DAY, '6 - 8 hours a day'),
(SMART_PHONE_EIGHT_PLUS_HOURS_A_DAY, '8 + hours a day'),
)
smart_phone_usage = models.CharField(null=True, blank=True, max_length=1, widget=models.Select(), choices=SMART_PHONE_USAGE, verbose_name='If Yes, How many hours a day do you access the Internet on it?')
我也试过在 forms.py
如 SelectDateWidget
所必需的,但没有得到它
I have also tried overwriting it in the forms.py
as was necessary for SelectDateWidget
but did not get it
任何帮助一如既往的赞赏
Any help is as always much appreciated
谢谢
推荐答案
Django模型不提供RadioSelect或Select widget。您需要在模型表单中添加。
Django model doesn’t provide RadioSelect or Select widget. You need to add this in Model form.
class SmartPhoneForm(forms.ModelForm):
class Meta:
model = Phone
fields = ['smart_phone_ownership', 'smart_phone_usage']
widgets = {
'smart_phone_ownership': forms.RadioSelect,
'smart_phone_usage': forms.Select,
}
models.py
models.py
class SmartPhone(models.Model):
# Do you own a Smartphone?
YES_SMARTPHONE = 'Yes'
NO_SMARTPHONE = 'No'
SMART_PHONE_OWNERSHIP = (
(YES_SMARTPHONE, 'Yes'),
(NO_SMARTPHONE, 'No'),
)
smart_phone_ownership = models.CharField(
null=True, max_length=1,
default=None,
choices=SMART_PHONE_OWNERSHIP, verbose_name='Do you own a Smartphone?')
#If 'Yes' How many hours a day do you access the Internet on it?
SMART_PHONE_LESS_THAN_ONE_HOUR_A_DAY = 'Less than one hour day'
SMART_PHONE_ONE_TO_TWO_HOURS_A_DAY = '1 - 2 Hours a day'
SMART_PHONE_TWO_TO_FOUR_HOURS_A_DAY = '2 - 4 hours a day'
SMART_PHONE_FOUR_TO_SIX_HOURS_A_DAY = '4 - 6 hours a day'
SMART_PHONE_SIX_TO_EIGHT_HOURS_A_DAY = '6 - 8 hours a day'
SMART_PHONE_EIGHT_PLUS_HOURS_A_DAY = '8 + hours a day'
SMART_PHONE_USAGE = (
(SMART_PHONE_LESS_THAN_ONE_HOUR_A_DAY, 'Less than one hour a day'),
(SMART_PHONE_ONE_TO_TWO_HOURS_A_DAY, '1 - 2 Hours a day'),
(SMART_PHONE_TWO_TO_FOUR_HOURS_A_DAY, '2 - 4 hours a day'),
(SMART_PHONE_FOUR_TO_SIX_HOURS_A_DAY, '4 - 6 hours a Day'),
(SMART_PHONE_SIX_TO_EIGHT_HOURS_A_DAY, '6 - 8 hours a day'),
(SMART_PHONE_EIGHT_PLUS_HOURS_A_DAY, '8 + hours a day'),
)
smart_phone_usage = models.CharField(
null=True, blank=True, max_length=1,
choices=SMART_PHONE_USAGE,
# default=None,
verbose_name='If Yes, How many hours a day do you access the Internet on it?'
)
这篇关于如何在ModelForm中指定Select和RadioSelect?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!