請參閱管理界面中有關custom validation的文檔。
基本上,你必須創建自己的(模型)的形式,可以說CustomFooAdminForm
並將其分配到管理模式:
class FooAdmin(admin.ModelAdmin):
form = CustomFooAdminForm
和形式,你可以有這樣的事情(見custom validation in forms):
# 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中扣除它們(針對MySQL的UNIX_TIMESTAMP(time_end) - UNIX_TIMESTAMP (time_start)
)。或者你可以在MySQL中使用DATEDIFF()
來獲得差異。但是請注意,如果您使用此類特殊功能(只要它們在其他數據庫中不具有相同名稱),則可將您的應用程序綁定到某個特定數據庫。
非常感謝您的詳細解釋!對於最後一部分(tim差異),我想timedelta可以用來代替unix時間技巧(但不確定:))。 – Hellnar 2010-02-11 12:54:37