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
