显示Django中另一个表的行数

Jim*_*Jim 2 python django django-models

我的模型文件中有以下类

class HardwareNode(models.Model):
    ip_address = models.CharField(max_length=15)
    port = models.IntegerField()
    location = models.CharField(max_length=50)
    hostname = models.CharField(max_length=30)

    def __unicode__(self):
        return self.hostname

class Subscription(models.Model):
    customer = models.ForeignKey(Customer)
    package = models.ForeignKey(Package)
    location = models.ForeignKey(HardwareNode)
    renewal_date = models.DateTimeField('renewal date')

    def __unicode__(self):
        x = '%s %s' % (self.customer.hostname, str(self.package))
        return x
Run Code Online (Sandbox Code Playgroud)

我想计算特定HardwareNode上的订阅数量,并在管理部分显示HardwareNode类,例如节点2上托管的10个订阅.

我还在学习Django,我不知道我会在哪里完成这个.我可以/应该在models.py或HTML中执行此操作吗?

谢谢,

-seth

rob*_*rob 6

创建a时foreign_key,另一个模型会获得一个管理器,它返回第一个模型的所有实例(请参阅向后导航)在您的情况下,它将命名为" subscription_set".

此外,Django允许模型中的虚拟字段,称为"模型方法",它们与数据库数据无关,但是作为模型的方法实现(参见模型方法)

把所有东西放在一起,你可以得到这样的东西:

class HardwareNode(models.Model):
    ip_address = models.CharField(max_length=15)
    port = models.IntegerField()
    location = models.CharField(max_length=50)
    hostname = models.CharField(max_length=30)
    subscription_count = lambda(self: self.subscription_set.count())
Run Code Online (Sandbox Code Playgroud)

然后,在要在管理面板中列出的字段列表中包含subscription_count.

注意:像往常一样,我没有检查这段代码,它甚至可能没有按原样运行,但它应该对如何处理您的问题有所了解; 此外,我使用lambda只是为了简洁,但通常我认为使用命名的一个更好的选择(样式,可维护性等).