我有一个名为bk_time的日期时间字段。现在,我想基于不同的用户为bk_time编写自定义验证。
例如,我有用户Staff_A
,Staff_B
和Superuser
:
Staff_A
只能设置时间=周一至周五上午9点至凌晨12点Staff_B
只能设置时间=仅限星期一Superuser
没有限制我已提到Django Doc Validators。但它似乎不适用于多重验证
我曾尝试撰写save_formset
Django Doc Admin。但似乎无法提出ValidationError
models.py
class Location(models.Model):
name = models.CharField('Location', max_length=100)
class Room(models.Model):
room_label = models.CharField('Room Lebel', max_length=100)
bk_time= models.DateTimeField('Booking Time')
admin.py
class RoomInline(admin.StackedInline):
model = Room
extra = 0
class LocationAdmin(admin.ModelAdmin):
list_display = ['id', 'name']
fields = ('name')
inlines = [RoomInline]
如果这是相关的,我使用Django 1.4。
答案 0 :(得分:0)
我认为这必须在表单验证上进行,而不是在字段验证上。这是因为您的验证取决于两个独立的字段。
特别是,这与身份验证非常相似:您的验证取决于用户和其他字段。看看Django如何实现其身份验证(来自django.contrib.auth
):
class AuthenticationForm(forms.Form):
[...]
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username and password:
self.user_cache = authenticate(username=username,
password=password)
if self.user_cache is None:
raise forms.ValidationError(
self.error_messages['invalid_login'],
code='invalid_login',
params={'username': self.username_field.verbose_name},
)
elif not self.user_cache.is_active:
raise forms.ValidationError(
self.error_messages['inactive'],
code='inactive',
)
return self.cleaned_data
在您的情况下,您希望在给定约束上引发ValidationError
,否则返回cleaning_data。