У меня две модели.По сути, я расширяю это обсуждение: Несколько изображений на модель Я хотел бы получить значение machine_name модели Design и использовать его при создании пути для ImageField upload_to в модели DesignImage.Что-то с эффектом: image = models.ImageField(upload_to='designs/' + design.get_machine_name + '/images')
Это приводит к следующей ошибке: AttributeError: 'ForeignKey' object has no attribute 'get_machine_name'
.
Надеюсь, приведенный ниже код понятен.
from django.db import models
from django.db.models.fields.related import ManyToManyField
from django.template.defaultfilters import slugify
class Design(models.Model):
name = models.CharField(max_length=30, help_text='Name of the design.')
machine_name = models.SlugField(editable=False)
def save(self, *args, **kwargs):
self.machine_name = slugify(self.name)
super(Design, self).save(*args, **kwargs)
def get_machine_name(self):
return self.machine_name
def __unicode__(self):
return self.name
class DesignImage(models.Model):
def get_upload_dir(self):
return 'designs/' + self.design.machine_name + '/images'
design = models.ForeignKey(Design, related_name='images')
caption = models.CharField(max_length=100)
image = models.ImageField(upload_to='designs/' + design.get_machine_name + '/images')
def __unicode__(self):
return self.caption
Я включил следующий код на случай, если он может быть полезен:
from designs.models import *
from django.contrib import admin
class DesignImageInline(admin.TabularInline):
model = DesignImage
extra = 3 # number of extra inline form fields to display
class DesignAdmin(admin.ModelAdmin):
inlines = [ DesignImageInline, ]
admin.site.register(Design, DesignAdmin)
admin.site.register(DesignImage)