Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 使用元类显示多个域中的零件列表_Django_Django Models_Django Admin - Fatal编程技术网

Django 使用元类显示多个域中的零件列表

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

希望这不会太难看,我刚开始从PHP转到Django,但我正试着把我的头脑放在模型上,不太明白如何处理这个问题

以下是我想做的:

1创建一个新的配置集RamConfig.size,设置为16GB

2从尺寸_选项中选择要包含在16GB配置中的尺寸和数量;例如,假设我在16GB配置中添加了8个2GB部件

3保存配置

上面的工作很好,但是现在我们有了一个16GB的RamConfig,有8个2GB的部件。我希望这些2GB部件中的每一个都引用Asset.Servermodels中RamConfig.servermodel所在的资产模型中的资产

因此,如果启动16GB配置,它将显示每个2GB部件的所有可用资产。我真的不确定这是否应该在模型或模板中完成;我现在只是想让它在管理中正常运行

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,但这要感谢您的提示。