См. Документацию о пользовательской проверке в интерфейсе администратора.
По сути, вам нужно создать собственную (модель) форму, скажем, CustomFooAdminForm
и назначить ее для модели администратора:
class FooAdmin(admin.ModelAdmin):
form = CustomFooAdminForm
и в форме вы можете иметь что-то вроде (см. пользовательская проверка в формах ):
# more or less pseudo code
class CustomFooAdminForm(forms.ModelForm):
def clean(self):
cleaned_data = super(CustomFooAdminForm, self).clean()
interval = cleaned_data.get("end_time") - cleaned_data.get("start_time")
type = cleaned_data.get("type")
q = Foo.objects.extra(select={'interval':'time_end - time_start'}
counter = q.filter(interval=intervak, type=type).count()
if counter > 0:
raise forms.ValidationError("ERROR!!!!")
# Always return the full collection of cleaned data.
return cleaned_data
Возможно, вам придется преобразовать DateTimeField
s в метки времени UNIX, прежде чем вы сможете вычесть их в SQL (UNIX_TIMESTAMP(time_end) - UNIX_TIMESTAMP (time_start)
для MySQL). Или вы можете использовать DATEDIFF()
в MySQL, чтобы получить разницу. Но обратите внимание, что вы привязываете свое приложение к определенной базе данных, если используете такие специальные функции (если они недоступны в других базах данных с тем же именем).