Проблема Django наследование formfield_callback в Modelforms

Я сейчас использовал только Django на пару недель, поэтому я могу приблизиться к этому всевозможным неправильным, но:

У меня есть базовая модификация, которую я Поместите несколько бойных материалов, чтобы сохранить вещи как можно сухими, и все мои фактические модификации просто подклассят эту базовую форму. Это отлично работает для error_css_class = 'Error' и требуется_csss_class = 'Trance' , но formfield_callback = add_css_classes не работает так, как будто я ожидаю.

Форма. Pypy

# snippet I found
def add_css_classes(f, **kwargs):
    field = f.formfield(**kwargs)
    if field and 'class' not in field.widget.attrs:
        field.widget.attrs['class'] = '%s' % field.__class__.__name__.lower()
    return field

class BaseForm(forms.ModelForm):
    formfield_callback = add_css_classes  # not working

    error_css_class = 'error'
    required_css_class = 'required'
    class Meta:
        pass

class TimeLogForm(BaseForm):
    # I want the next line to be in the parent class
    # formfield_callback = add_css_classes
    class Meta(BaseForm.Meta):
        model = TimeLog

Конечная цель - ударить несколько пикеров DateTime jQuery на формах с классом DateField / Timefield / DateTimeField. Я хочу все поля времени даты в приложении использовать тот же виджет, поэтому я решил сделать это таким образом, чем явно делать это для каждого поля в каждой модели. Добавление дополнительной линии к каждому классу форм не такая большая сделка, но она просто помешала мне, что я не мог понять это. Копая в источнике Django, показал, что это, вероятно, делает что-то, что я не понимаю:

django.forms.models

class ModelFormMetaclass(type):
    def __new__(cls, name, bases, attrs):
        formfield_callback = attrs.pop('formfield_callback', None)

Но я не знаю, как __ init __ и __ новое __ все водушены. В BaseForm я попробовал переопределить __ init __ и настроить formfield_callback до и после вызова super, но я предполагаю, что он должен быть где-то в args или kwargs.

8
задан yellottyellott 8 September 2011 в 04:01
поделиться