2016-03-15 103 views
3

这里有关实地Django管理是我的模型:在另一个模型

class Location(models.Model): 
    location_id = models.AutoField(primary_key=True) 
    location = models.CharField(max_length=30, blank=False, null=False) 

class Host(models.Model): 
    host_id = models.AutoField(primary_key=True) 
    location = models.ForeignKey('Location', on_delete=models.PROTECT) 
    host = models.CharField(max_length=30, blank=False, null=False) 

class Device(models.Model): 
    device_id = models.AutoField(primary_key=True) 
    host = models.ForeignKey('Host', on_delete=models.PROTECT) 
    model = models.ForeignKey('Model', on_delete=models.PROTECT) 
    ip = models.GenericIPAddressField(null=True) 
    name = models.CharField(max_length=30, blank=False, null=False) 

这里是DeviceAdmin类:

class DeviceAdmin(admin.ModelAdmin): 
    list_display=('host','name','model', 'ip') 
    list_filter=(
     ('model', admin.RelatedOnlyFieldListFilter), 
     ('host', admin.RelatedOnlyFieldListFilter), 
    )  
admin.site.register(Device, DeviceAdmin) 

我要看看设备管理页面上的位置查询字段。然而,LocationDevice相关,而不是Host

如何显示Location字段以按设备管理页面上的位置 - >主机过滤设备类?

回答

5

你可以在list_filters链领域和使用的ModelAdmin方法list_display

class DeviceAdmin(admin.ModelAdmin): 
    list_display = ('host', 'host_location', 'name', 'model', 'ip') 
    list_filter = (
     ('model', admin.RelatedOnlyFieldListFilter), 
     ('host', admin.RelatedOnlyFieldListFilter), 
     'host__location', 
    ) 

    def host_location(self, instance): 
     return instance.host.location 
    host_location.short_description = "Location" 
    host_location.admin_order_field = 'host__location' 
admin.site.register(Device, DeviceAdmin) 

更新按照意见

要筛选外键(讨论通过任何字段,包括链式关系),你应该检查提供自动完成的工具。例如:django-autocomplete-light。这将使你呈现这类小部件:

enter image description here

+0

无法解析关键词“位置”到现场。 –

+0

我犯了一个错误,你测试了我的最新编辑?如果是这样,你能提供有关错误的更多细节吗? –

+0

是的,我测试了它。错误是:无法将关键字'位置'解析到字段中。选项有:device_id,host,host_id,... –

相关问题