2014-07-17 28 views
18

Tôi có một ứng dụng Django rất đơn giản để ghi lại các bài giảng cho các đồng nghiệp của tôi. Vì nó là khá tiểu học, tôi đang sử dụng chính quyền quản trị Django. Dưới đây là models.py tôi:Xác nhận tùy chỉnh trong quản trị Django

#models.py 
from django.db import models 

class Lecture(models.Model): 
    topic = models.CharField(max_length=100) 
    speaker = models.CharField(max_length=100) 
    start_date = models.DateField() 
    end_date = models.DateField() 

tôi cần phải đảm bảo rằng không ai đi vào ngày bắt đầu kể từ ngày kết thúc trong các hình thức quản trị, vì vậy tôi đọc các tài liệu django để xác nhận tùy chỉnh trong quản trị và thực hiện những điều sau đây admin.py tôi:

#admin.py 
from models import Lecture 
from django.contrib import admin 
from django import forms 


class LectureForm(forms.ModelForm): 
    class Meta: 
     model = Lecture 

     def clean(self): 
      start_date = self.cleaned_data.get('start_date') 
      end_date = self.cleaned_data.get('end_date') 
      if start_date > end_date: 
       raise forms.ValidationError("Dates are incorrect") 
     return self.cleaned_data 


class LectureAdmin(admin.ModelAdmin): 
    form = LectureForm 
    list_display = ('topic', 'speaker', 'start_date', 'end_date') 

admin.site.register(Lecture, LectureAdmin) 

Tuy nhiên, điều này không có tác dụng gì trên quản trị của tôi và tôi có thể tiết kiệm được các bài giảng mà start_date là sau end_date như thể hiện trong hình ảnh: enter image description here

tôi đang làm gì sai ??

Trả lời

14

Bạn có vấn đề về thụt lề. Phương thức clean của bạn được thụt vào trong lớp Meta của biểu mẫu. Di chuyển nó trở lại một cấp độ. Ngoài ra, hãy đảm bảo rằng câu lệnh return được thụt vào trong phương thức.

+0

đã hoạt động !! .. và tôi gần như đã dành 2 giờ đọc lại tài liệu để sửa lỗi cho nó !! .. Tôi đã có thêm một nghi ngờ nữa .. lỗi xác thực bị ném lên chỉ khi tôi tạo một mục nhập mới. Đối với những cái hiện có, chúng tiếp tục ở đó .. Tôi giả sử rằng phương thức clean() chỉ được gọi khi một mô hình được lưu. Làm cách nào để đảm bảo rằng nó được gọi mỗi lần tải trang? – Amistad

+1

@Amistad Phương thức 'clean' chỉ được gọi khi biểu mẫu được gửi chứ không phải" khi mô hình được lưu "(nếu đó là những gì bạn muốn bạn đang tìm kiếm xác thực của mô hình: https://docs.djangoproject.com/vi /1.7/ref/models/instances/#validating-objects) ... Điều gì sẽ vẫn không xác thực các phiên bản mô hình của bạn "mỗi lần tải trang", nhưng tại sao bạn lại muốn một "tính năng" như vậy? –

+0

hmm..để tôi nghĩ về điều đó, tất cả những thay đổi của tôi đối với mô hình chỉ xảy ra thông qua quản trị viên thông qua biểu mẫu..để kiểm tra xác thực, có đủ .. .. – Amistad

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