2012-05-17 28 views
5

Tôi muốn điền một trường trước khi xác thực trong quản trị viên.Tôi làm cách nào để tạo một phương pháp làm sạch tùy chỉnh cho trang web quản trị?

models.py

class Ad(models.Model): 
    ..... 
    manual_code = models.BooleanField("Manual Code", default=False) 
    code   = models.TextField("Code") 

admin.py

class MyAdAdminForm(forms.ModelForm): 
    class Meta: 
     model = Ad 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     cleaned_data['code'] = "dadad" 
     print cleaned_data 
     return cleaned_data 

class AdAdmin(admin.ModelAdmin): 
    form = MyAdAdminForm 

admin.site.register(Ad, AdAdmin) 

cuối cùng tôi muốn tạo ra rằng toàn bộ "code" lĩnh vực, nhưng tôi vẫn nhận được lỗi trong quản trị rằng lĩnh vực này là trống mặc dù tôi có thể thấy giá trị của nó ("dadad") trong trình bao.

Tôi cũng đã cố gắng

def clean_code(self): 

và nó không được gọi hàm mà ở tất cả.

và tôi cũng đã cố gắng

def save_model(request,....): 

trong lớp AdAdmin nhưng nó không được gọi là một trong hai.

vì vậy tôi nên làm gì?

+0

Không nên làm sạch() có một mức thụt đầu dòng là một phần của MyAdAdminForm? – jpic

+0

nó có trong mã của tôi, tôi sẽ sửa nó ở đây. –

Trả lời

2

Cũng như gọi phương thức clean tùy chỉnh của bạn, Django xác thực từng trường biểu mẫu riêng lẻ. Đây là kiểm tra trường riêng lẻ đang gây ra lỗi trường bắt buộc. Để biết chi tiết đầy đủ, hãy xem tài liệu Django trên Form and field validation.

Nếu bạn không yêu cầu đầu vào của người dùng trong trường mã, bạn có thể ghi đè phương thức __init__ của biểu mẫu và đặt required=False.

class MyAdAdminForm(forms.ModelForm): 
    class Meta: 
     model = Ad 

    def __init__(self, *args, **kwargs): 
     super(MyAdAdminForm, self).__init__(*args, **kwargs) 
     self.fields['code'].required = False 

Khi lĩnh vực này là không cần thiết, các hình thức sẽ gọi phương thức clean_code trong xác nhận, vì vậy bạn có thể thiết lập giá trị đó.

+0

Tôi muốn giữ trường bắt buộc. đó là toàn bộ vấn đề. –

+0

Như tôi đã hiểu, bạn sẽ tự động tạo ra giá trị của trường 'code', vì vậy bạn không yêu cầu người dùng nhập mã. Do đó, yêu cầu phải là sai cho biểu mẫu này. Nếu bạn yêu cầu người dùng nhập giá trị, sau đó hiển thị lỗi khi người dùng không nhập giá trị có vẻ là hành vi đúng. – Alasdair

+0

Tôi không thể tạo giá trị của trường nếu 'manual_code' được chọn. vì vậy nếu người dùng đã kiểm tra và không chèn bất kỳ giá trị nào cho 'code', nó sẽ trả về lỗi cho chúng. –

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