Django管理员将两个表组合成一个页面

时间:2013-01-23 01:06:15

标签: django-admin

我想在一个管理页面中显示几个模型。这是我的模特:

class Server(models.Model):
    type = models.CharField(max_length=44, choices=TYPES)
    number = models.CharField(max_length=3)
    environment = models.CharField(max_length=7, choices=ENVIRONMENTS)
    location = models.CharField(max_length=3, choices=LOCATONS)
    cpu = models.PositiveSmallIntegerField()
    ram = models.PositiveIntegerField()
    os = models.CharField(max_length=24, choices=OSs, default='CentOS 6.3')
    eth0_ip = models.IPAddressField(unique=True)
    eth0_mac = models.CharField(max_length=17, unique=True, null=True,
                           blank=True)
    confluence_page = models.URLField(null=True, blank=True)

    class Meta:
        abstract = True

    def __unicode__(self):
        return "%s%s.%s" % (self.type, self.number, self.environment)

class Real(Server):
    manufacturer = models.CharField(max_length=20, choices=MANUFACTURERS_REAL)
    rack = models.CharField(max_length=6, null=True, blank=True)
    rack_u = models.PositiveSmallIntegerField(null=True, blank=True)
    serial_num = models.CharField(max_length=8, unique=True, null=True,
                              blank=True)

class Virtual(Server):
    manufacturer = models.CharField(max_length=20,
                                choices=MANUFACTURERS_VIRTUAL)
    host_id = models.ForeignKey(Real)

我想知道的是,无论如何我都要创建/扩展/任何允许查看来自两个数据库的所有对象的管理界面。例如,我可以进入管理员,然后当我点击应用程序名称时,我得到两个数据库的change_list,当我选择一个特定的对象时,说一个虚拟,我将获得管理界面来创建或更改虚拟对象。 / p>

如果我不清楚,请告诉我,我会尽我所能以不同的方式更清楚地解释。

1 个答案:

答案 0 :(得分:0)

如果您要显示的父模型类型有一个公共外键,Django admin inlines会帮助您:

https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin

在您的实例中,由于Real是Server的子级,您可以为Real构建管理页面,并使用内联来查看管理员中该服务器的所有虚拟对象。