ich stehe gerade etwas auf dem Schlauch. Ich möchte eine Abhängigkeit zischen 2 Spalten/Feldern in einem Model herstellen.
Folgende Models habe ich:
Die Definitionen der Hardwaretypes:
Code: Alles auswählen
class Hardware(BaseModel):
#ForeignKey
product = models.ManyToManyField('product.Product',related_name='hardware_product')
#Info
manufacturer = models.CharField(max_length = 100, blank=False, null=False, )
name = models.CharField(max_length = 100, blank=False, null=False, )
software = models.CharField(max_length = 100, blank=False, null=True, )
interfaces = GenericRelation(Interface)
class Meta:
unique_together = ('manufacturer', 'name',)
class ChassisSlot(BaseModel):
hardware = models.ForeignKey("Hardware", blank=False, null=False)
slotNumber = models.CharField(max_length = 100, blank=False, null=False, )
comment = models.TextField(default="", blank=True)
class Meta:
unique_together = ('hardware', 'slotNumber',)
class NicCard(BaseModel):
hardware = models.ManyToManyField('Hardware',related_name='hardware_related')
interfaces = GenericRelation(Interface)
manufacturer = models.CharField(max_length = 100, blank=False, null=False, )
name = models.CharField(max_length = 100, blank=False, null=False, )
class Meta:
unique_together = ('manufacturer', 'name',)
Code: Alles auswählen
class Config(BaseModel):
# Foreign Keys
customer = models.ForeignKey('customer.Customer', related_name="config_Customers_related")
site = models.ForeignKey('customer.Site', related_name="config_sites_related")
location = models.ForeignKey('customer.Location', related_name="config_sites_related")
product = models.ForeignKey('product.Product', related_name="config_products_related")
template = models.ForeignKey('confgen.Template', related_name="config_template_related")
master_code = models.ForeignKey('Code', null=True, related_name="mastercode")
hardware = models.ForeignKey('hardware.Hardware', related_name="hardwareConfig_related", null=False, blank=False)
# Info
hostname = models.CharField(max_length=100, blank=False, null=False, unique=True)
comment = models.TextField(default="", blank=True)
is_initiated = models.BooleanField(default=False)
is_uptodate = models.BooleanField(default=False)
def __unicode__(self):
return self.hostname
class HardwareSlot(BaseModel):
config = models.ForeignKey('Config', related_name="Config_related", null=False, blank=False)
chassisSlot = models.ForeignKey('hardware.ChassisSlot', null=False, blank=False)
nicCard = models.ForeignKey('hardware.NicCard', null=True, blank=False)
class Meta:
unique_together = ('config', 'chassisSlot')
In der Configapp wird dann die gewählte Hardware und die Bestückung mit NicCards gespeichert.
Mein Problem ist jetzt folgendes:
Ich habe keine Kontrolle in der HardwareSlot Tabelle, dass der Slot auch tatsächlich zu der Hardware gehört, so wie in ChassisSlots definiert.
Ich bräuchte hier jetzt eine Abhängigkeit zu config.hardware, sodass chassisSlot nur die der Hardware zugehörigen Slots enthalten darf.
Ist dies iwie realisierbar. Vll. mit einem Query, das dem Attribut choices zugewiesen wird?
Oder bin ich mit meiner Struktur komplett auf dem Holzweg und ihr habt eine bessere Idee.
Hoffe Ihr konntet mir folgen, wenn nicht anmeckern und ich versuche das Problem anders zu beschreiben.
Gruß schrodi