我正在使用Django配置文件,我需要在配置文件表单中进行一些更改。
正常情况下,我的表单完全正常,但现在我想要更改垃圾,添加jquery以重新填充选择表单。
问题是Django Profile从模型中创建了表单,所以我想在select表单中添加一个属性id(我还没有),但是select不给我看选项(值),我不理解为什么,选择形式带来了另一个模型与FK的价值。
谢谢你们:), 抱歉我的英文
我的自定义部分是:
def __init__(self, *args, **kwargs):
super(_ProfileForm, self).__init__(*args, **kwargs)
self.fields['birth_date'].widget = widget=SelectDateWidget(years=range(datetime.date.today().year,1900,-1))
self.fields['sector'].widget= forms.Select(attrs={'onchange':'get_vehicle_color();'})
django的型材/简档/ utils.py
#....
def get_profile_form():
"""
Return a form class (a subclass of the default ``ModelForm``)
suitable for creating/editing instances of the site-specific user
profile model, as defined by the ``AUTH_PROFILE_MODULE``
setting. If that setting is missing, raise
``django.contrib.auth.models.SiteProfileNotAvailable``.
"""
profile_mod = get_profile_model()
class _ProfileForm(forms.ModelForm):
class Meta:
model = profile_mod
exclude = ('user',) # User will be filled in by the view.
def __init__(self, *args, **kwargs):
super(_ProfileForm, self).__init__(*args, **kwargs)
self.fields['birth_date'].widget = widget=SelectDateWidget(years=range(datetime.date.today().year,1900,-1))
self.fields['sector'].widget= forms.Select(attrs={'onchange':'get_sector_code();'})
return _ProfileForm
答案 0 :(得分:2)
你真正应该做的是处理你的jquery trhough Javascript,而不是通过python!
所以导入一个类似这样的js文件:
$(function(){
$('#id_sector').onchange(function(){
get_vehicle_color();
})
})
对于那些实际需要为表单字段设置属性的人,可以这样做:
def __init__(self, *args, **kwargs):
super(_ProfileForm, self).__init__(*args, **kwargs)
self.fields['sector'].widget.attrs = {'my_attribute_key':'my_attribute_value'}
这种方式更清晰,因为您不会覆盖窗口小部件并在修改模型或窗体类属性时解决问题。
答案 1 :(得分:0)
试试这个:
class _ProfileForm(forms.ModelForm):
birth_date = forms.DateTimeField(
widget = SelectDateWidget(years=range(datetime.date.today().year,1900,-1))
)
sector = forms.ChoiceField(
widget = Select(attrs={'onchange':'get_sector_code();'})
)
class Meta:
model = profile_mod
exclude = ('user',) # User will be filled in by the view.