django模型引用来自其他类的对象

时间:2015-02-21 18:57:56

标签: python django python-2.7 django-models django-admin

你好django还有新东西,但考虑到下面的模型,以及它们的关系,我如何为另一个类中的字段引用的对象创建一个只读字段?我在stackoverflow上找了一段时间,但不确定会是什么样的模型引用。

这个的基本逻辑是: 我有一个服务器机架,位于服务器机房的地板上,我将它与机架位置相关联,并排列以管理功耗和其他好东西。仅供我最终用户参考,我想要一个只读字段来向他们展示这个机架所在的行,以及它从机架位置得出的结果。我一直在努力创建一种方法来查找它,但似乎无法弄清楚语法或在django管理页面上找到相关内容。

任何想法都会受到超级赞赏,我真的可以使用帮助,因为我一直在盯着文档,似乎无法找到相关的模型参考。

class rack(models.Model):
    class Meta:
        verbose_name = "Rack"
        verbose_name_plural = "Racks"

    def __unicode__(self):
        return str(self.position)

    def row(self, obj):
        return self.position.row

    position = models.OneToOneField("rackposition")
    row = row(position.row.row)
    asstag = models.CharField("Asset Tag", max_length=200, unique=True)
    rackunits = models.IntegerField("Rack Units")

class rackposition(models.Model):
    class Meta:
        verbose_name = "Rack Position"
        verbose_name_plural = "Rack Positions"

    def __unicode__(self):
        return str(self.position)

    position = models.CharField("Position", max_length=35, primary_key=True)
    row = models.ForeignKey("row")

class row(models.Model):
    class Meta:
        verbose_name = "Row"
        verbose_name_plural = "Rows"

    def __unicode__(self):
        return str(self.row) + "." + str(self.suite)

    row = models.CharField("Row ID", max_length=200, unique=True)
    suite = models.ForeignKey(suite, blank=False)
    power_budget = models.IntegerField("Power Budget")
    power_volt = models.IntegerField("Power Voltage")
    dual_bus = models.BooleanField("Dual Bus", default=False)

1 个答案:

答案 0 :(得分:0)

您不需要方法。假设您有一个名为my_rack的机架实例,则可以使用my_rack.position.row获取其行。

请注意,您应该真正关注PEP8并使用CamelCase作为您的班级名称。

如果要将其视为管理员中的只读字段,则需要在模型或ModelAdmin类上定义方法。例如:

class RackAdmin(admin.ModelAdmin):
    model = Rack
    readonly_fields = ('row',)

    def row(self, obj):
        return obj.position.row