2011-05-30 89 views
0

我有以下的模型 -添加在Django管理篩選器

class NetworkAdministrator (models.Model): 
    email = models.EmailField() 
    admin_name = models.CharField(max_length=100, blank=True) 

class Network(models.Model): 
    network = models.CharField(max_length=50) 
    network_name = models.CharField(max_length=50) 
    administrators = models.ManyToManyField(NetworkAdministrator) 

在管理控制檯中,任何網絡添加,它顯示所有管理員,就好像它是做什麼 - NetworkAdministrator.objects.all()

我將如何使它所以對於每個特定的網絡中,組管理員只包括那些從目前的網絡 -

Network.objects.get(network='**network name**').administrators.all()

從功能上說,這是我希望能夠到在管理面板中執行:

1) add network = 'China' 
2) add 2 administrators to this network = cadmin1, cadmin2, cadmin3 
3) add network = 'India' 
4) add 2 administrators to this network: iadmin1, iadmin2 
    (no administrators should show from the China network). 

謝謝。

回答

0

使用InlineModelAdmin

class AdministrationInline(admin.TabularInline): 
    model = Network.administrators.through 

class NetworkAdministratorAdmin(admin.TabularInline): 
    inlines = [ 
     AdministrationInline, 
    ] 

class NetworkAdmin(admin.ModelAdmin): 
    inlines = [ 
     AdministrationInline, 
    ] 
    exclude = ('administrators',) 

admin.site.register(Network, NetworkAdmin) 
admin.site.register(NetworkAdministrator, NetworkAdministratorAdmin) 

請注意:through中介模式和'administrators'

+0

手動排除這是一個多對多的關係,而不是一個外鍵。當試圖執行你指定的方法時,我得到一個錯誤,說'沒有ForeignKey到'並且在查看文檔鏈接,TabularInline僅適用於FK。 – David542 2011-05-30 17:36:52

+0

我的錯誤。儘管我在文檔中找到了一些東西。我更新了鏈接和示例。 – Maccesch 2011-05-30 18:36:08