好吧,这是一个在我的头上非常有意义的问题,但很难正确解释:)我有一个django应用程序,我想存储许多不同项目的记录设备。每种类型的设备都会有一个自定义模型来存储其属性,如下面的MyEquipment
。每种类型的设备也会有一个“类别”,这对于存储属性很有用。django模型中的硬编码属性
class Category(models.Model):
code = models.CharField('Category', max_length=4, unique=True)
description = models.CharField('Description', max_length=30)
...
class MyEquipment(models.Model):
serial = models.IntegerField()
...
要保存这个属性来我的模型,我可以用一个外键Category
但我并不需要,因为在MyEquipment
每个记录必须是同一Category
。于是我想也许我可以硬编码在MyEquipment
元这样的Category
:
class MyEquipment(models.Model):
serial = models.IntegerField()
...
class Meta:
category = Category.objects.get(code='EC')
但随后这将依赖于Category
模型被填充了数据建立模型MyEquipment
。对我来说,这似乎并不是最好的做法,使用可能存在或可能不存在的数据来定义另一个模型的结构。有没有更好的方法来设置MyEquipment
模型与哪个Category
相关?
编辑
感谢下面的讨论中,它使我意识到也许我是不是在我原来的职位明确。所以我想要做的就是将MyEquipment
链接到Category
。所以,我可以做这样的事情:
>>> from myapp.models import MyEquipment
>>> MyEquipment.CATEGORY
<Category: EC>
我想整个模型链接到Category
,这样我就可以根据它是类别进程以不同的方式每个模型在我看来。已经想过这个问题有点多,我可以通过写MyEquipment
这样得到这个功能:
class MyEquipment(models.Model):
CATEGORY = Category.objects.get(code='EC')
serial = models.IntegerField()
...
这样的作品,但它是最好的方法是什么?我猜这个模型会在每次实例化类的时候执行这个操作?有没有更有效的方法?
好,谢谢,我还没有碰到过的@property装饰面前。我如何在我的用例中使用它? – DrBuck
您可以直接访问它:'my_equipment_instance.category'。 –
我明白了,所以我会把这个def作为MyEquipment类定义的一部分?这种方法仍然依赖于“类别”模型中的'EC'记录,这是否重要?还是不值得担心? – DrBuck