django模型引用其他类的对象
Posted
技术标签:
【中文标题】django模型引用其他类的对象【英文标题】:django model referencing object from other class 【发布时间】:2015-04-23 08:54:51 【问题描述】:您好,对 django 来说非常新,但考虑到以下模型及其关系,如何为引用另一个类中的字段的对象创建只读字段?我在 *** 上找了一段时间,但不确定会是哪种模型参考。
这个的基本逻辑是: 我有这个服务器机架,它位于服务器机房的地板上,我将它与机架位置相关联,并通过行来管理功耗和其他好东西。只是为了我的最终用户的参考,我想要一个只读字段来向他们展示这个机架所在的行,以及它来自机架位置。我一直在摆弄创建一种方法来查找它,但似乎无法弄清楚语法或在 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】:您不需要方法。假设您有一个名为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
【讨论】:
这是一个只读字段吗? row = my_rack.position.row 对不起,我不明白这个问题。 对不起,丹尼尔让我澄清一下。如果我希望它出现在管理对象字段上,当您单击一个对象时,那将是什么模型参考?它实际上不是数据库中的一个字段,所以是否有一个参考可以用于表单中的通用只读字段?还是我必须自己创建? 啊,我没有意识到你想要它作为一个只读字段。查看我的更新。 models.py 对象字段的逻辑相同吗?我在管理员中获得了它以在列表中使用,但如果最终用户单击该信息将不存在的对象。以上是关于django模型引用其他类的对象的主要内容,如果未能解决你的问题,请参考以下文章
使用覆盖保存为抽象模型扩展 Django ModelForm