Django:为UpdateView生成的表单字段添加额外的属性

时间:2018-10-13 05:55:24

标签: django django-models django-forms django-templates django-views

使用一个自定义用户(该用户是Django AbstractUser的子类),试图归档的是允许用户更新其数据的所有方法都可以正常工作,但是表单看起来很难看。下面是我的代码,class属性未添加到表单中。 forms.py (简体)

class AccountEditForm(forms.ModelForm):
 class Meta:
     model = CustomUser
     fields = ('first_name', 'last_name', 'phone_number', 'date_of_birth', 'country')
     widget = {
         'first_name':forms.TextInput(
             attrs={
                 'class': 'input-bordered',
             }
         )
     }

views.py

class UserAccountDetails(LoginRequiredMixin, UpdateView):

template_name = 'dashboard/account_edit.html'
context_object_name = 'form'
form_class = AccountEditForm
model = CustomUser

def get_object(self, queryset=None):
    """
    Return the object the view is displaying.
    """
    if queryset is None:
        queryset = self.get_queryset()

    #Get logged in user from request data
    queryset = queryset.filter(pk=self.request.user.id)

    try:
        # Get the single item from the filtered queryset
        obj = queryset.get()
    except queryset.model.DoesNotExist:
        raise Http404(_("No %(verbose_name)s found matching the query") %
                    {'verbose_name': queryset.model._meta.verbose_name})
    return obj

1 个答案:

答案 0 :(得分:0)

widgets选项用于覆盖显式声明的字段的默认设置。要将类添加到该字段,您可以有很多选择。

选项1:明确声明表单字段,并通过Meta中的widgets添加类。

class AccountEditForm(forms.ModelForm):
    first_name =  forms.TextField(widget=forms.TextInput())

class Meta:
     model = CustomUser
     fields = ('first_name', 'last_name', 'phone_number', 'date_of_birth', 'country')
     widgets = {
         'first_name': forms.TextInput(
             attrs={
                 'class': 'input-bordered',
             }
         )
     }

选项2:选项1的短版。

class AccountEditForm(forms.ModelForm):
    first_name =  forms.TextField(widget=forms.TextInput(attrs={'class': 'input-bordered'}))

    class Meta:
        model = CustomUser
        ...

选项3:在表单的__init__方法中添加类。

class AccountEditForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(AccountEditForm, self).__init__(*args, **kwargs)
        self.fields['first_name'].widget.attrs['class'] = 'input-bordered'

选项4:使用django-widget-tweaks插件。