django 模型引用来自其他 class 的对象
django model referencing object from other class
你好,django 很新,但考虑到以下模型及其关系,我如何为引用另一个 class 中的字段的对象创建只读字段?我在 Whosebug 上找了一段时间,但不确定那是什么样的模型参考。
这件事的基本逻辑是:
我有这个服务器机架,它位于服务器机房的地板上,我将它与机架位置相关联,并排成一排来管理功耗和其他好东西。仅供我的最终用户参考,我想要一个只读字段来向他们显示此机架所在的行,以及它从机架位置派生的。我一直在摆弄创建一种方法来查找它,但似乎无法弄清楚语法或在 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)
你不需要方法。假设您有一个名为 my_rack
的机架实例,您可以使用 my_rack.position.row
.
获取它的行
请注意,您应该真正遵循 PEP8 并使用 CamelCase 作为您的 class 名称。
如果您想在管理中将其视为只读字段,则需要在模型或 ModelAdmin class 上定义一个方法。例如:
class RackAdmin(admin.ModelAdmin):
model = Rack
readonly_fields = ('row',)
def row(self, obj):
return obj.position.row
你好,django 很新,但考虑到以下模型及其关系,我如何为引用另一个 class 中的字段的对象创建只读字段?我在 Whosebug 上找了一段时间,但不确定那是什么样的模型参考。
这件事的基本逻辑是: 我有这个服务器机架,它位于服务器机房的地板上,我将它与机架位置相关联,并排成一排来管理功耗和其他好东西。仅供我的最终用户参考,我想要一个只读字段来向他们显示此机架所在的行,以及它从机架位置派生的。我一直在摆弄创建一种方法来查找它,但似乎无法弄清楚语法或在 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)
你不需要方法。假设您有一个名为 my_rack
的机架实例,您可以使用 my_rack.position.row
.
请注意,您应该真正遵循 PEP8 并使用 CamelCase 作为您的 class 名称。
如果您想在管理中将其视为只读字段,则需要在模型或 ModelAdmin class 上定义一个方法。例如:
class RackAdmin(admin.ModelAdmin):
model = Rack
readonly_fields = ('row',)
def row(self, obj):
return obj.position.row