Django Many-toMany aus verschiedenen Klassen

Django, Flask, Bottle, WSGI, CGI…
Antworten
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Morgen,

mir fehlt grade ein wenig die "Eingebung" oder vielleicht nur ein Schubs in die richtige Richtung.

Ich habe mit Django (angefangen hatte ich mit Flask) einen "Produkt Katalog" für uns intern gebaut in dem alle unsere Produkte mit allen technischen und sonst so benötigten Daten drin sind. Mit der Zeit kamen jetzt immer mehr Dinge hinzu die mein "Katalog" auch noch übernehmen soll. JETZT bin ich aber an dem Punkt an dem mir wohl ein paar Sachen auf die Füße fallen..

Aktuell habe ich an mehreren Stellen in meinem model File bzw. ImageFields. Das wollte ich dann grob so ändern, dass ich alle Dateien in einer Klasse "sammle" und dann einfach per ForeignKey in den jeweiligen Klasse verlinke.

Code: Alles auswählen

class FileType(models.Model):
    description = models.CharField(verbose_name=_('Beschreibung'), max_length=250)


class ProductFiles(models.Model):
    file = models.FileField(verbose_name=_('Datei'), upload_to='...')
    description = models.CharField(verbose_name=_('Beschreibung'), max_length=250)
    file_type = models.ForeignKey(FileType, verbose_name=_('Datei Typ'), on_delete=models.PROTECT)
    etim_mime_code = models.ForeignKey(ETIMMimeCode, verbose_name=_('ETIM Mime Code'), on_delete=models.PROTECT)


class ProductVariant(models.Model):
    ...
    product_image = models.ForeignKey(ProductFiles, verbose_name=_('Produktbild'), on_delete=models.PROTECT, null=True)
    ...


class PhotometricData(models.Model):
    ...
    ldt_file = models.ForeignKey(ProductFiles, verbose_name=_('LDT-Datei', ), on_delete=models.PROTECT, null=True)
    light_curve = models.ForeignKey(ProductFiles, verbose_name=_('Lichtverteilungskurve', ), on_delete=models.PROTECT, null=True)
    ...

Jetzt aber mein Problem ... an einigen Stellen kann es jetzt auch vorkommen, dass ich mehrere Dateien hochladen muß.
Ich kann natürlich in jeder (um nachträgliche Änderungen zu vermeiden würde ich es dann überall machen :wink: ) Klasse ein ManyToMany- statt des ForeignKey-Fields setzen, damit hätte ich dann eben einige zusätzliche Tabellen.
Hat vielleicht jemand eine "bessere" Lösung?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Tabelle ProductFiles enthält jeweils nur ein File, der Plural ist also falsch.
Da Du jeweils auf die selbe Files-ID aus unterschiedlichen Contexten heraus verweisen willst, bleibt Dir nicht viel anderes übrig, als für jede Relation eine eigene Tabelle zu erzeugen.
Also nein, es gibt keine bessere Lösung.
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Hmm... dann lag ich ja gar nicht so verkehrt ;-). Das mit dem ProductFiles hab ich geändert, überall hab ich alles im Singular... nur da hab ich gestern Abend dann aus unerfindlichen Gründen ein s dahinter gemacht...war wahrscheinlich schon zu spät..

Danke
Antworten