我有一个任务,需要为这个问题写一个解决方案。
具有2个字段parking_on和parking_off。如果用户是职员用户,则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)
答案 0 :(得分:0)
但是请注意,就像Model.full_clean()一样,调用模型的save()方法时不会调用模型的clean()方法。
您的clean_parking_off
方法也是如此。您必须在save方法中调用它,该方法也需要通过request
来保存方法,巫婆不是一个好方法。
您可以从另一面看到此问题,如果您正在使用管理面板,则可以通过覆盖save_model
来完成此验证,因为您可以看到here,并且在视图中可以访问{{1} }。
答案 1 :(得分:0)
它与此配合使用:
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 fieldsets