Я использую Django только пару недель, так что я, возможно, приближаюсь к этим всевозможным ошибкам, но:
У меня есть базовая ModelForm, в которую я положил некоторые шаблонные вещи, чтобы сохранить вещи как можно СУХИЕ, и все мои фактические ModelForms просто подкласс этой базовой формы. Это отлично работает для error _ css _ class = 'error'
и required _ class = 'required'
, но formfield _ callback = add_css_classes
не работает так, как ожидалось.
# 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
Конечная цель состоит в том, чтобы использовать некоторые средства выбора даты и времени jquery в формах с классом поля данных/поля времени/поля времени. Я хочу, чтобы все поля даты и времени в приложении использовали один и тот же виджет, поэтому я предпочел сделать это так, чем явно делать это для каждого поля в каждой модели. Добавление дополнительной строки к каждому классу формы - это не такая уж большая сделка, но это просто испортило мне, что я не могу это понять. Копание в источнике джанго показало, что это, вероятно, делает то, что я не понимаю:
class ModelFormMetaclass(type):
def __new__(cls, name, bases, attrs):
formfield_callback = attrs.pop('formfield_callback', None)
Но я не знаю, как __ init __
и __ новые __
все смешанные. В BaseForm я попытался переопределить __ init __
и установить formfield_callback до и после вызова супер, но я предполагаю, что это должно быть где-то в args или kwargs.
У меня есть список конечных точек возможно перекрывающихся интервалов, и я хотел бы, чтобы эффективный способ вычислить общую площадь, охватываемую k интервалов, для k = 1,2,...
(без проведения всех попарных сравнений). Или это невозможно?
Например, предположим, что x - список начальных точек, а y - список конечных точек,
и что x [i] < y [i]
и
x = (1.5, 2, 3, 5)
y = (3, 4, 4, 6)
так, что общая площадь, охватываемая, по меньшей мере, одним интервалом, равна 3,5, а общая площадь, покрываемая, по меньшей мере, двумя, равна 1.
спасибо, ph