2013-04-17 28 views
13

Tôi có một vài mô hình:Làm cách nào để hiển thị danh sách tra cứu ngược ForeignKey trong giao diện quản trị DJango?

class Customer(models.Model): 
    customer_name = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.customer_name 

    class Meta: 
     ordering = ('customer_name',) 

class Unit(models.Model): 
    unit_number = models.IntegerField() 
    rentable = models.BooleanField() 
    owner = models.ForeignKey(Customer, related_name='units', blank=True, null=True) 

    def __unicode__(self): 
     return str(self.unit_number) 

    class Meta: 
     ordering = ('unit_number',) 

Tôi có giao diện quản trị làm việc tốt khi tôi thêm một đơn vị (Tôi có thể chọn những khách hàng để gán nó vào) nhưng khi tôi đi để tạo/chỉnh sửa một khách hàng trong giao diện quản trị DJango, nó không liệt kê bất kỳ đơn vị để lựa chọn. Làm cách nào để tôi có thể kích hoạt tra cứu trong phần đó để khớp với phần trong vùng tạo/chỉnh sửa khách hàng?

Trả lời

36

Theo mặc định, ModelAdmin sẽ chỉ cho phép bạn quản lý mô hình "chính nó", không phải mô hình liên quan. Để chỉnh sửa mô hình Đơn vị liên quan, bạn cần xác định một "InlineModelAdmin" - chẳng hạn như admin.TabularInline - và đính kèm nó vào CustomerAdmin của bạn.

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects

Ví dụ, trong admin.py của bạn:

from django.contrib import admin 
from models import Customer, Unit 

class UnitInline(admin.TabularInline): 
    model = Unit 

class CustomerAdmin(admin.ModelAdmin): 
    inlines = [ 
     UnitInline, 
    ] 
admin.site.register(Customer, CustomerAdmin)