2012-08-26 36 views
10

Tôi đang sử dụng một DateField django trong mô hình của mình.Xác thực trường mô hình Django mà không có biểu mẫu tùy chỉnh

class CalWeek(models.Model): 
    start_monday = models.DateField(verbose_name="Start monday") 

Tôi có phương thức xác thực tùy chỉnh dành riêng cho mô hình của mình: Tôi muốn đảm bảo rằng đây thực sự là ngày thứ Hai. Tôi hiện không có lý do để sử dụng một ModelForm tùy chỉnh trong admin - một trong những Django tạo ra là tốt. Tạo một lớp biểu mẫu tùy chỉnh chỉ để tôi có thể sử dụng đường clean_start_monday(self)1 mà các lớp biểu mẫu django cung cấp có vẻ như rất nhiều công việc chỉ để thêm một số xác nhận trường. Tôi nhận ra rằng tôi có thể override the model's clean method và tăng số ValidationError tại đó. Tuy nhiên, điều này không lý tưởng: các lỗi này được gán là lỗi ngoài trường và kết thúc ở đầu trang, không phải bên cạnh đầu vào của người dùng có vấn đề - không phải là UX lý tưởng.

Có cách nào dễ dàng để xác thực trường mô hình cụ thể và thông báo lỗi của bạn hiển thị bên cạnh trường trong quản trị viên mà không phải sử dụng lớp biểu mẫu tùy chỉnh không?

Trả lời

14

Bạn có thể xem xét Trình xác thực Django.

https://docs.djangoproject.com/en/dev/ref/validators/

Bạn sẽ đặt validator trước lớp, sau đó thiết lập các validator trong Field.

def validate_monday(date): 
    if date.weekday() != 0: 
     raise ValidationError("Please select a Monday.") 

class CalWeek(models.Model): 
    start_date = models.DateField(validators=[validate_monday]) 
+0

Tốt! Tôi không biết làm thế nào tôi đã bỏ qua điều này. –

+0

Tuyệt! Đã không sử dụng trước đây, nhưng điều này là .. rất sạch sẽ. Đăng trình xác nhận sạch sẽ! –

Các vấn đề liên quan