添加在Django管理筛选器

问题描述:

我有以下的模型 -添加在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). 

谢谢。

使用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