2011-06-27 34 views
18

Trong biểu mẫu bổ sung cho bất kỳ ứng dụng nào trong quản trị django, cho các trường khóa ngoài của mô hình đó .. đi kèm danh sách thả xuống với nút thêm (mở trong cửa sổ bật lên). Chúng ta có thể có một hình thức mà chúng ta có thể thêm các trường mô hình khóa ngoại trong cùng một hình thức.django quản trị dữ liệu trường ngoài khóa chính thêm

Đối với ví dụ

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    contact = models.ForeignKey(Contact, blank=True, null=True) 

Đối với người dùng và liên hệ với các lĩnh vực một thả xuống với nút add hiện diện trong quản trị thêm form.Can chúng tôi có tất cả các lĩnh vực của người dùng và liên lạc trong cùng một trang ??

Trả lời

11

Có, bạn có thể thực hiện điều đó bằng hệ thống quản trị nội tuyến.

class UserAdmin(admin.StackedInline): 
    model = User 
class ContactAdmin(admin.StackedInline): 
    model = Contact 

class UserProfileAdmin(admin.ModelAdmin): 
    inlines = [ UserAdmin, ContactAdmin ] 

để biết thêm chi tiết, hãy kiểm tra https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects .

+0

Tha nks Darioush, Nhưng nó không hoạt động, hệ thống quản trị nội tuyến hoạt động đối với trường hợp ngược lại từ hướng dẫn bạn có thể thấy [link] (https://docs.djangoproject.com/en/dev/ref/contrib/admin/ # inlinemodeladmin-đối tượng) Đối với trường hợp trên nếu tôi sẽ cần nó hoạt động như: lớp 'UserProfileAdmin (admin.StackedInline): mô hình = UserProfile lớp UserAdmin (admin.ModelAdmin): inlines = [UserProfileAdmin] ' Theo cách mà bạn đưa ra, nó đưa ra một lỗi' không có ForeignKey để ' – Neo

+1

Xin lỗi, xấu của tôi. Rõ ràng không có cách nào dễ dàng để thực hiện công việc đó, xem http://stackoverflow.com/questions/6419248/inline-like-solution-for-django-admin-where-admin-contains-foreignkey-to-other-mo cho thêm thông tin – Darioush

0

Có một django add-on để có được inlines trong trường hợp như thế này, nơi các mối quan hệ là trái ngược với thông thường: django_reverse_admin

Bạn sẽ cần phải thêm django_reverse_admin để requirements.txt của bạn:

-e git+https://github.com/anziem/django_reverse_admin.git#egg=django_reverse_admin 

Sau đó import nó:

admin.py

from django_reverse_admin import ReverseModelAdmin 

class UserProfileAdmin(ReverseModelAdmin): 
    inline_reverse = ['user', 'contact'] 
    inline_type = 'tabular' # or could be 'stacked' 

admin.site.register(UserProfile, UserProfileAdmin) 
Các vấn đề liên quan