在Django的__init__方法中循环遍历表单字段时出现问题

时间:2017-03-26 14:50:25

标签: django

我的目标是遍历所有表单字段并将这些类分配给它们:

class ContactForm(forms.Form):
    def __init__(self, *args, **kwargs):    
        super(ContactForm, self).__init__(*args, **kwargs)   
        for field_name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control input-sm plain'
            if field.required == True: 
                field.widget.attrs['required'] = ''

    class Meta:
        model = Contact
        fields = '__all__'

此代码的问题是self.fields.items()似乎是空的(因此我从未进入for循环)。

我的猜测是问题出现的原因是我从Django 1.9和python 2升级到Django 1.10和python 3,或者因为底层模型的定义中存在自定义管理器。

有人可以分享这方面的专业知识吗?

class Contact(BaseMixin, DeleteMixin):
    provider_account = models.ForeignKey(ProviderAccount, models.DO_NOTHING)
    client_id = models.IntegerField()
    name = models.CharField(max_length=300)
    profile_photo_url = models.CharField(max_length=100, default = 'no_image.jpg')
    event_type_id = models.IntegerField(EventType.choices(), blank=True, null=True)
    is_satisfied = models.NullBooleanField()
    objects = CustomQuerySetManager()

    class Meta:
        managed = False
        db_table = 'contact'

    class QuerySet(QuerySet):
        #....

1 个答案:

答案 0 :(得分:1)

您的表单是标准表单,而不是模型表单; Meta类被忽略,唯一的字段是你自己定义的字段。

您的表单应该继承自library(dplyr) x %>% group_by(grp = as.integer(gl(nrow(x), 4, nrow(x)))) %>% mutate(b = mean(a)) %>% ungroup() %>% select(-grp) ,以实现此目的。