2011-06-21 32 views
13

Tôi đang cố gắng viết một ứng dụng CRUD sử dụng chế độ xem chung dựa trên lớp Djangos. Sau đây là mã tôi đã viết để tạo một người dùng mới trong db.Sự cố với chế độ xem chung dựa trên lớp học ở Django

from django.views.generic import CreateView 
    from django.contrib.auth.decorators import login_required 
    from django.contrib import messages 

    class UserCreateView(CreateView): 
    """ 
    Display and accept a new user to be created in db 
    """ 
    form_class = ProfileForm 
    template_name = 'userdb/profile_form.html' 
    success_url = '/organization/users/' 

    def post(self, request, *args, **kwargs): 
     messages.success(request, "Success", extra_tags='msg') 
     return super(UserCreateView, self).post(request, *args, **kwargs) 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(UserCreateView, self).dispatch(*args, **kwargs) 

Lưu ý rằng để thêm thông báo thành công được hiển thị cho người dùng, tôi phải mở rộng chức năng đăng bài. Tôi biết đây không phải là một cách tốt để làm điều này như, khi chức năng này được gọi là nó không quyết định xem các hình thức gửi có chứa dữ liệu hợp lệ. Vì vậy, câu hỏi của tôi là, Có cách nào khuyến khích kết hợp khung tin nhắn Djangos với các lớp chung dựa trên quan điểm chung?

Trả lời

16

Câu trả lời phụ thuộc vào những gì cụ thể bạn đang tìm kiếm để làm với khung thư. Nếu nó cần phải được gọi cho mỗi yêu cầu get bạn sẽ tự nhiên cần phải đặt nó trong phương pháp get (điểm là không có nơi nào phù hợp để đặt mã này).

Dù sao, có vẻ như bạn đang tìm kiếm một địa điểm chỉ được kích hoạt khi biểu mẫu hợp lệ.

CreateView sử dụng phương thức ModelFormMixin thực hiện phương thức form_valid chỉ được kích hoạt khi lưu biểu mẫu thành công. Hoàn hảo!

def form_valid(self, form): 
    messages.success(self.request, "Success", extra_tags='msg') 
    return super(UserCreateView, self).form_valid(form) 
    # ModelFormMixin will now save 
    # FormMixin will now redirect to success_url() 
    # override above behavior if you need to do something with the object 
+0

Tôi đã thử triển khai chức năng 'form_valid' trước nhưng nó không hoạt động vì tôi không thể tìm cách truy cập đối tượng yêu cầu. Điều này hoạt động tốt Cảm ơn bạn rất nhiều! – vimukthi

+0

np! vui vì nó đã giúp –

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