我有一个任务,我需要为这个问题写一个解决方案。
有两个字段parking_on和parking_off。如果用户是staffuser,则parking_off日期必须与parking_on相同;如果用户是admin,则parking_off的日期可以不同于parking_on。
class Parking(models.Model):
parking_on = models.DateField(auto_now=False, auto_now_add=False, blank=True, null=True,
help_text='Alege data cand doresti sa vii in office',)
parking_off = models.DateField(auto_now=False, auto_now_add=False, blank=True, null=True,
help_text='Alege Data Plecarii')我试过了,但它没有捕捉到错误,它只是保存到数据库中:
def clean_parking_off(self, request):
if not request.user.is_superuser and self.parking_off !=self.parking_on:
raise ValidationError(
{'parking_off': _('You cant book for a future date!')})我有这个保存函数:
def save(self):
list = []
d = self.parking_on
while d <= self.parking_off:
list.append(
Parking(user=self.user,
email=self.email,
parking_on=d,
parking_off=d,
location=self.location
)
)
d = d + timedelta(days=1)
Parking.objects.bulk_create(list)发布于 2018-09-27 02:35:42
正如Django Document所说:
但是,请注意,与Model.full_clean()一样,当您调用模型的
()方法时,不会调用模型的clean()方法。
所以clean_parking_off方法也是如此。你必须在保存方法中调用它,这也需要将request传递给保存方法,这不是一个好方法。
你可以从另一个方面看到这个问题,如果你使用的是管理面板,这个验证可以通过覆盖save_model来完成,因为你可以看到here,在视图中你也可以访问request.user。
发布于 2018-09-28 20:25:38
它是这样工作的:
ASA SE FILTREAZA ELEMENTE IN FUNCTIE DE user
def remove_from_fieldsets(fieldsets, fields):
for fieldset in fieldsets:
for field in fields:
if field in fieldset[1]['fields']:
new_fields = []
for new_field in fieldset[1]['fields']:
if not new_field in fields:
new_fields.append(new_field)
fieldset[1]['fields'] = tuple(new_fields)
break
def get_fieldsets(self, request, obj=None):
fieldsets = super(ParkingModelAdmin, self).get_fieldsets(request, obj)
if not request.user.is_superuser:
remove_from_fieldsets(fieldsets, ('parking_off',))
return fieldsetshttps://stackoverflow.com/questions/52523074
复制相似问题