2010-06-07 25 views
8

chúng ta hãy giả định rằng tôi có mô hình rất cơ bảndjango-admin - cách sửa đổi ModelAdmin để tạo nhiều đối tượng cùng một lúc?

class Message(models.Model): 
     msg = models.CharField(max_length=30) 

mô hình này được đăng ký với module admin:

class MessageAdmin(admin.ModelAdmin): 
    pass 
admin.site.register(Message, MessageAdmin) 

Hiện nay khi tôi đi vào giao diện quản trị, sau khi nhấp vào "Thêm thông báo" Tôi chỉ có một hình thức mà tôi có thể nhập msg.

Tôi muốn có nhiều biểu mẫu (có thể định dạng) trên "Thêm trang" để tôi có thể tạo nhiều thư cùng một lúc. Nó thực sự gây phiền nhiễu phải bấm vào "Lưu và thêm một" mỗi lần duy nhất.

Lý tưởng nhất là tôi muốn đạt được thứ gì đó như InlineModelAdmin nhưng hóa ra bạn chỉ có thể sử dụng nó cho các kiểu có liên quan đến đối tượng được chỉnh sửa.

Bạn sẽ đề xuất gì để sử dụng để giải quyết vấn đề này?

Trả lời

1

Giải pháp thay thế, Vì, có khả năng bạn có FK đến User, vì vậy bạn có thể xác định InlineModel trên mô hình User.

Nếu không, cách tiếp cận dễ nhất có thể là tạo chế độ xem quản trị viên tùy chỉnh vì không có chế độ xem quản trị viên chung hiển thị và lưu biểu mẫu.

+0

Thật không may là tôi không có bất kỳ FK nào trong mô hình này vì vậy điều này không hoạt động với tôi. Tôi sẽ tìm hiểu xem nó có thể cắm xem tùy chỉnh vào admin của django. – skrobul

3

này có thể không chính xác những gì bạn đang tìm kiếm, nhưng nếu bạn muốn tạo nhiều đối tượng cùng một lúc bạn có thể để somehthing như thế này:

#In /forms.py 
MessageAdminForm(forms.ModelForm): 
    msg = CharField(max_length=30) 
    count = IntegerField() 

#In /admin.py 
from app.admin import MessageAdminForm 
MessageAdmin(admin.ModelAdmin): 
    form = MessageAdminForm 
    fieldsets = (
     (None, { 
      'fields' : ('msg','count')  
     }),) 
    def save_model(self, request, obj, form, change): 
     obj.msg = form.cleaned_data['msg'] 
     obj.save() 
     for messages in range(form.cleaned_data['count']): 
      message = Message(msg=form.cleaned_data['msg']) 
      message.save() 

Về cơ bản những gì bạn đang làm là tạo ra một tùy chỉnh biểu mẫu cho mẫu quản trị viên của bạn, yêu cầu người dùng tạo bao nhiêu lần đối tượng. Logic được hiểu hơn trong phương thức save_model.

+0

Thao tác này sẽ hoạt động nhưng chỉ dành cho các biểu mẫu quản trị rất đơn giản. Ví dụ, nếu có inlines trong admin thì Pandemonium! – frnhr

0

Điều này rất dễ dàng nếu bạn đang sử dụng Nội tuyến. Sau đó, bạn có thể sử dụng extra = 10 hoặc tuy nhiên nhiều biểu mẫu bổ sung mà bạn muốn. Dường như không tương đương với số ModelAdmin.

Tất nhiên trong mô hình tin nhắn của bạn, bạn sẽ cần phải tạo một ForeignKey cho một số loại mô hình nhóm tin nhắn dưới dạng một lớp chức năng khác và để có bố cục nhiều biểu mẫu mà bạn đang tìm kiếm.

Ví dụ:

models.py: 
    class Group(models.Model): 
     name = models.CharField(max_length=30) 
    class Message(models.Model): 
     msg = models.CharField(max_length=30) 
     grp = models.ForeignKey(Group) 

admin.py: 
    class MessageInline(admin.TabularInline): 
     model = Message 
     extra = 10 
    class GroupAdmin(admin.ModelAdmin): 
     inlines = [MessageInline] 
    admin.site.register(Group, GroupAdmin) 

Điều này sẽ cung cấp cho bạn những gì bạn muốn trong giao diện quản lý và tạo nhóm (ngay cả khi bạn chỉ cho phép một nhóm) và chỉ có trường bổ sung sẽ là name trong nhóm mô hình. Tôi thậm chí không chắc chắn bạn sẽ cần điều đó. Ngoài ra tôi chắc chắn giá trị cho extra có thể được tạo động cho một giá trị tùy ý.

Tôi hy vọng điều này sẽ hữu ích!

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