これはあまりにも醜いことではないと思いますが、私はPHPからDjangoに移行し始めましたが、私はモデルの周りを頭で覆そうとしています。これにアプローチする方法を見つけ出す。ここでMetaクラスを使用してManyToManyFieldから部品のリストを表示
は私がやろうとしているものです:
1)新しい「設定」(16ギガバイトを言ってRamConfig.sizeを設定)
2)を作成します含めるようにサイズとSIZE_CHOICESからの数量た選択16GBの設定では、たとえば、16GBの「設定」に2つの2GBの「パーツ」を追加したとします。
3)設定を保存します。
上記はうまくいきましたが、今では(8)2GBの「パーツ」を持つ16GBのRamConfigがあります。 RamConfig.servermodelがAsset.Servermodelsにある「Asset」モデルから、これらの2GBパーツのそれぞれにアセットを参照させたいと思います。
したがって、16GBの「config」をプルアップすると、2GBの「パーツ」ごとに使用可能なすべてのアセットが表示されます。これをモデルやテンプレートで行うべきかどうかは本当に分かりません。私はちょうどそれが今のところadminで適切に機能するようにしようとしています。任意のヒントについて
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']
ありがとう:]
。サーバーに1GBのDIMMが1枚必要な場合は、そのサーバーで使用できる1GBのアセットすべてを返却したいと考えています。 これは次のようなものです: ユーザー:Heya、Optiplex220用に4GBのRAMが必要です サーバー:素晴らしいですが、(1)4GBのDIMMが必要です。 Optiplex220に適用される1GB DIMMは、4431-1331,3323-1312または1121-5554です。 チップをありがとうございます。 – Zee