2013-03-13 32 views
13

Tôi có một số kiểu máy có số lượng lớn các dòng inline. Vì không phải tất cả đều cần thiết cho mọi đối tượng mà tôi đã khai báo mô hình nội dòng với extra = 0 sao cho một số nhỏ add + xuất hiện trên nội tuyến.django 1.5 admin inline extra

Tuy nhiên, điều này dường như không còn hoạt động trong django 1.5. Nếu extra = 0 được đặt, nội tuyến sẽ không thể chỉnh sửa được nữa.

Có cách nào để đưa hành vi 1,4 vào 1,5 không?

Ví dụ Code:

class ModelInline(admin.StackedInline): 
    model = MyModel 
    extra = 0 

class OtherModelAdmin(admin.ModelAdmin) 
    inlines = [ModelInline] 

admin.site.register(OtherModel, OtherModelAdmin) 

Chỉnh sửa (một số màn hình):

Django 1.4: django 1.4 extra=0

Django 1.5: enter image description here

(Hinzufügen == thêm)

+0

Mã ví dụ sẽ rất tốt để xem tại đây. –

+0

k, thêm một số mã ví dụ – Jannis

Trả lời

7

Điều này đã xảy ra trước đó.

The new javascript made this impossible because the "Add Another" button 
was controlled by max_num, and ignored a value of 0. 
The javascript ignored a value of 0 because max_num has a default value of 0, 
and all the code using it had taken to equating max_num = 0 with being "off". 
So you can't actually have a maximum of 0. It's not possible. 

Có bản vá được tạo ra bởi Gabrial Hurley để khôi phục hành vi mong muốn mà không vi phạm bất cứ điều gì khác. Đây là 3 năm trước và tôi không biết nếu nó vẫn làm việc cho Django 1.5. Chỉ cần cố gắng :)

https://code.djangoproject.com/attachment/ticket/13023/13023_inlines_patch.diff

Đây là vé cho rằng lỗi tương tự (3 năm trước):

https://code.djangoproject.com/ticket/13023

+0

Tôi dường như không áp dụng điều này trong 1.6 vì total_form_count không còn được xác định trong models.py, chỉ trong formsets.py và mã khác, vì vậy tôi không chắc chắn nên thay đổi gì . Có ai giúp được không? – smwilsonau

+0

@smwilsonau Trong Django 1.6, nó được gọi là 'initial_form_count' – catherine

+0

cảm ơn, tôi tìm thấy các dòng tương đương và áp dụng các miếng vá, nhưng vấn đề của tôi hóa ra là một cái gì đó khác ... – smwilsonau

2

Tôi chạy vào cùng một vấn đề bởi vì tôi đã có nội dung quản trị tĩnh trong một thư mục nằm ngoài cài đặt của django. Sao chép nội dung tĩnh Django 1.5 từ django/contrib/admin/static/admin/js/tới STATIC_ROOT/admin/js đã khắc phục sự cố.

+1

Đó thực sự không phải là điều tốt để làm. Khi bạn nâng cấp phiên bản django tại một số điểm, bạn sẽ gặp rắc rối vì bạn sẽ không thấy phiên bản mới của các tệp tĩnh đó (chỉ có vấn đề như vậy). Nếu bạn máy chủ nội dung tĩnh một cách thích hợp (https://docs.djangoproject.com/en/dev/howto/static-files/) bạn sẽ không có vấn đề gì – nivcaner

0

giải pháp tốt hơn là ghi đè phương thức get_extra của chính nội tuyến. Điều này làm việc trong Django 1.9, mặc dù tôi không thể nói cho các phiên bản trước đó