2017-02-10 3 views
1

Я хотел бы показать ip_address от Hosts модель в HostInfo's admin display.django admin поле отображения из родственной модели

# models.py 
class Hosts(models.Model): 
    host_name = models.CharField(max_length=200, unique=True) 
    ip_address = models.GenericIPAddressField(protocol='both', unpack_ipv4=True) 
    def __unicode__(self): 
    return unicode(self.host_name) 
    def hostip(self): 
    return unicode(self.ip_address) 

и я ниже в admin.py

# admin.py 
class HostInfoResource(resources.ModelResource): 

    host = fields.Field(column_name='host', 
           attribute='host', 
           widget=ForeignKeyWidget(Hosts, 'host_name')) 
    project = fields.Field(column_name='project', 
           attribute='project', 
           widget=ForeignKeyWidget(Project, 'project_name')) 
    env = fields.Field(column_name='env', 
          attribute='env', 
          widget=ForeignKeyWidget(Env, 'env_name')) 

    class Meta: 
     model = HostInfo 
     skip_unchanged = True 
     import_id_fields = ('id', 'host','ticket','deployed_by') 
     export_order = ('id', 'host', 'nexpose_level','cpus','memory','os', 
         'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name', 
         'vcenter_status','ticket','env','project','deployed_by', 
         'updated_on','created_on') 

class HostInfoAdmin(ImportExportModelAdmin): 
    resource_class = HostInfoResource 
    list_display = ['id', 'host', 'nexpose_level','cpus','memory','os', 
         'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name', 
         'vcenter_status','ticket','env','project','deployed_by'] 

    readonly_fields = ('updated_on','created_on',) 

admin.site.register(HostInfo, HostInfoAdmin) 

Я не совсем понимая, что мне нужно для достижения этой цели.

ответ

1

попробуйте использовать двойной знак подчеркивания, когда вы хотите входить в отношения.

class HostInfoAdmin(ImportExportModelAdmin): 
    resource_class = HostInfoResource 
    list_display = ['id','host__ip_address', 'host', 'nexpose_level','cpus','memory','os', 
         'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name', 
         'vcenter_status','ticket','env','project','deployed_by'] 

    def host__ip_address(self, obj): 
     return obj.host.ip_address 
+0

<класс 'inventory.admin.HostInfoAdmin'>: (admin.E108) Значение 'list_display [1]' относится к 'host__ip_address', который не является вызываемым, атрибутом 'HostInfoAdmin', или атрибут или метод в разделе «inventory.HostInfo». –

+0

проверить это может помочь http://stackoverflow.com/questions/32883057/foreign-key-reference-for-django-in-admin – Darshan

+1

Эта ссылка получила мне ответ, который мне нужен. Спасибо. –

Смежные вопросы