Dateipfad anpassen
Verfasst: Dienstag 12. November 2019, 14:20
Hallo zusammen,
ich habe mein Model wie folgt erstellt:
nun soll das Bild aber in folgendem Pfad gespeichert werden:
Nun die Frage: Wie mache ich das?
Am leichtesten wäre es, bereits in der Tabelle Img auf den Pfad zu referenzieren. Habe ich nicht hingekriegt.
Habe mir vorerst mit einem post_save Signal geholfen:
Aber das kann es doch auch nicht sein, zumal ich es nicht hinkriege den Bildpfad nachträglich anzupassen
(Anbei: Order und Customer beeinhalten noch mehr Attribute, daher war es nötig diese aufzuteilen. Für den Dateipfad sind diese aber irrelevant)
Eventuell hat ja jemand einen Vorschlag für mich
ich habe mein Model wie folgt erstellt:
Code: Alles auswählen
class Customer(models.Model):
key = models.CharField(max_length=6)
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
key = models.CharField(max_length=8)
class Img(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
img = models.ImageField(upload_to = 'files'.format())
Code: Alles auswählen
imgPath = os.path.join(settings.MEDIA_ROOT, 'Kunden', customer.key, order.key)
Am leichtesten wäre es, bereits in der Tabelle Img auf den Pfad zu referenzieren. Habe ich nicht hingekriegt.
Habe mir vorerst mit einem post_save Signal geholfen:
Code: Alles auswählen
def imagePath(sender, **kwargs):
if kwargs['created']:
data = kwargs['instance']
file = data.img.path
newPath = os.path.join(
settings.MEDIA_ROOT,
'Kunden',
data.order.customer.key,
data.order.key,
'Bilder',
data.img.url.split('/')[-1]
)
copyfile(file, newPath)
post_save.connect(imagePath, sender=Img)
def createCustomerFolder(sender, **kwargs):
if kwargs['created']:
os.mkdir(os.path.join(
settings.MEDIA_ROOT,
'Kunden',
kwargs['instance'].key
)
)
post_save.connect(createCustomerFolder, sender=Customer)
def createOrderFolder(sender, **kwargs):
if kwargs['created']:
orderDir = os.path.join(
settings.MEDIA_ROOT,
'Kunden',
kwargs['instance'].customer.key,
kwargs['instance'].key
)
os.mkdir(orderDir)
os.mkdir(os.path.join(orderDir, 'Bilder'))
post_save.connect(createOrderFolder, sender=Order)

(Anbei: Order und Customer beeinhalten noch mehr Attribute, daher war es nötig diese aufzuteilen. Für den Dateipfad sind diese aber irrelevant)
Eventuell hat ja jemand einen Vorschlag für mich
