【发布时间】:2011-08-02 21:40:38
【问题描述】:
我有两个模型。基本上,我是从这个讨论中扩展而来的:Multiple images per Model 我想获取 Design 模型的 machine_name 的值,并将其用于为 DesignImage 模型中的 ImageField upload_to 创建路径。大意是: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)
【问题讨论】:
-
您应该更改标题以反映“在 ImageField 上传中使用外键属性”或类似的实际问题
标签: django django-models django-admin