我有一个称为bk_time的日期时间字段。现在,我想根据不同的用户编写bk_time的自定义验证。
例如,我有个用户Staff_A
,Staff_B
并且Superuser
:
Staff_A
只能设置时间=周一至周五9 am-12amStaff_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')
管理员
class RoomInline(admin.StackedInline):
model = Room
extra = 0
class LocationAdmin(admin.ModelAdmin):
list_display = ['id', 'name']
fields = ('name')
inlines = [RoomInline]
如果这是相关的,那么我正在使用Django 1.4。
我认为这必须在表单验证中进行,而不是在字段验证中进行。这是因为您的验证取决于两个独立的字段。
特别是,这与身份验证非常相似:您的验证取决于用户和另一个字段。看一下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
给定的约束提出,否则返回cleaned_data。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句