django init函数与表格中的attrs

时间:2009-09-18 05:02:26

标签: django django-models django-forms

我正在使用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

2 个答案:

答案 0 :(得分:2)

你真正应该做的是处理你的jquery trhough Javascript,而不是通过python!

的Javascript

所以导入一个类似这样的js文件:

$(function(){
  $('#id_sector').onchange(function(){
    get_vehicle_color();
  })
})

Django表单html属性

对于那些实际需要为表单字段设置属性的人,可以这样做:

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.