我正在将调查从Form转换为Django 1.6.2中的ModelForm。
有人能告诉我forms.ChoiceField(widget=forms.Select(),和forms.ChoiceField(widget=forms.RadioSelect()使用ModelForm的等价性吗?
我曾尝试过widget=models.Select()或widget=models.RadioSelect(),但它一直存在错误。
AttributeError:“模块”对象没有属性“选择” AttributeError:“模块”对象没有属性“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所必需的,但是没有得到它。
任何帮助都是非常感谢的。
谢谢
发布于 2015-05-12 20:28:18
Django模型不提供RadioSelect或Select。您需要将其添加到模型表单中。
forms.py
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
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?'
)https://stackoverflow.com/questions/30199471
复制相似问题