Django 使用元类显示多个域中的零件列表
希望这不会太难看,我刚开始从PHP转到Django,但我正试着把我的头脑放在模型上,不太明白如何处理这个问题 以下是我想做的: 1创建一个新的配置集RamConfig.size,设置为16GB 2从尺寸_选项中选择要包含在16GB配置中的尺寸和数量;例如,假设我在16GB配置中添加了8个2GB部件 3保存配置 上面的工作很好,但是现在我们有了一个16GB的RamConfig,有8个2GB的部件。我希望这些2GB部件中的每一个都引用Asset.Servermodels中RamConfig.servermodel所在的资产模型中的资产 因此,如果启动16GB配置,它将显示每个2GB部件的所有可用资产。我真的不确定这是否应该在模型或模板中完成;我现在只是想让它在管理中正常运行Django 使用元类显示多个域中的零件列表,django,django-models,django-admin,Django,Django Models,Django Admin,希望这不会太难看,我刚开始从PHP转到Django,但我正试着把我的头脑放在模型上,不太明白如何处理这个问题 以下是我想做的: 1创建一个新的配置集RamConfig.size,设置为16GB 2从尺寸_选项中选择要包含在16GB配置中的尺寸和数量;例如,假设我在16GB配置中添加了8个2GB部件 3保存配置 上面的工作很好,但是现在我们有了一个16GB的RamConfig,有8个2GB的部件。我希望这些2GB部件中的每一个都引用Asset.Servermodels中RamConfig.serv
from django.db import models
class Manufacturer(models.Model):
name = models.CharField(max_length=20,unique=1)
def __unicode__(self):
return self.name
class ServerModel(models.Model):
name = models.CharField(max_length=20,unique=1)
manufacturer = models.ForeignKey(Manufacturer)
def __unicode__(self):
return "%s %s" % (self.manufacturer, self.name)
class Asset(models.Model):
SIZE_CHOICES = (
('512MB', '512MB'),
('1GB', '1GB'),
('2GB', '2GB'),
('4GB', '4GB'),
('8GB', '8GB'),
('16GB', '16GB'),)
name = models.CharField(max_length=20)
sku = models.CharField(max_length=10,unique=1)
oneoff = models.BooleanField()
size = models.CharField(max_length=8, choices=SIZE_CHOICES)
servermodels = models.ManyToManyField(ServerModel)
#Returns a string containing the platforms this asset is linked to.
def used_on(self):
usedon = []
for servermodel in self.servermodels.all():
usedon.append(servermodel.__str__())
return ", ".join(usedon)
def __unicode__(self):
return self.size
class RamConfig(models.Model):
size = models.CharField(max_length=5, verbose_name="Configuration Size")
description = models.CharField(max_length=30)
servermodel = models.ForeignKey(ServerModel, verbose_name="Server Model")
assets = models.ManyToManyField(Asset, through='RamConfigPart')
def __unicode__(self):
return self.size
def total_parts(self):
return self.assets.all().count()
class RamConfigPart(models.Model):
SIZE_CHOICES = (
('512MB', '512MB'),
('1GB', '1GB'),
('2GB', '2GB'),
('4GB', '4GB'),
('8GB', '8GB'),
('16GB', '16GB'),)
config_size = models.CharField(max_length=8, choices=SIZE_CHOICES)
ramconfig = models.ForeignKey(RamConfig)
asset = models.ForeignKey(Asset)
quantity = models.PositiveIntegerField()
def __unicode__(self):
return self.asset.name
class Meta:
unique_together = ['ramconfig', 'asset']
谢谢你的提示:如果我是你,我会重新考虑模型结构。如果您的问题是表示服务器上有多少RAM和RAM占用多少插槽,我将使用两个字段来解决这个问题 然后,您可以在unicode方法中执行以下操作:
def __unicode__(self):
return "%s GB (%s)" % (self.ram, self.slots)
它只是一个工具,用于返回可用于指定配置的库存资产。因此,如果一台服务器需要一个1GB DIMM,我希望返回该服务器中可以使用的所有1GB资产。它会是这样的:用户:嘿,我需要4GB的RAM来安装Optiplex220服务器:太好了,你需要4个1GB的DIMM。适用于Optiplex220的1GB DIMM是4431-1331、3323-1312或1121-5554,但这要感谢您的提示。