我正在将调查从Form
转换为Django 1.6.2中的ModelForm
。
任何人都可以使用forms.ChoiceField(widget=forms.Select(),
告诉我forms.ChoiceField(widget=forms.RadioSelect()
和ModelForm
的等值是什么吗?
我已尝试过widget=models.Select()
或widget=models.RadioSelect()
,但它一直在提出错误
AttributeError:'module'对象没有属性'Select'
AttributeError:'module'对象没有属性'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
,但是没有得到它
任何帮助都一如既往地受到赞赏
由于
答案 0 :(得分:5)
Django模型不提供RadioSelect或Select小部件。您需要以模型形式添加它。
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,
}
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?'
)