我有这个模型,上传了Image字段。它有一个外键引用另一个类。
from django.template.defaultfilters import slugify
def upload_to(path, attribute):
def upload_callback(instance, filename):
return '%s%s/%s' % (path, unicode(slugify(getattr(instance, attribute))), filename)
return upload_callback
class Data(models.Model):
place = models.CharField(max_length=40)
typeOfProperty = models.CharField(max_length=30)
typeOfPlace = models.CharField(max_length=20)
price = models.IntegerField()
ownerName = models.CharField(max_length=80)
class ImageData(models.Model):
property = models.ForeignKey(Data, related_name='images')
image = models.ImageField(upload_to = upload_to('image/', 'ownerName'),blank=True,null=True)
def __unicode__(self):
return self.property.ownerName
我已经提到这个This Web Page来为要存储的图像创建一个动态字段。
我怀疑是否可以使用onerName
作为属性(因为ownerName在超类中):
image = models.ImageField(upload_to = upload_to('image/', 'ownerName'),blank=True,null=True)
Django如何考虑需要提供此请求?
请有人能解释一下吗?
答案 0 :(得分:1)
'ownerName'
无效。在ImageField中直接定义要保存的内容非常复杂。也许你应该做这样的事情:
def upload_to(path):
def upload_callback(instance, filename):
return '%s%s/%s' % (path, unicode(slugify(instance.property.ownerName), filename)
return upload_callback
如果你真的想让它尽可能动态,你必须将'property.ownerName'
之类的东西传递给函数,拆分字符串,从property
实例中检索attrtibute ImageData
然后属性来自其外键实例的ownerName
。
虽然我认为这会让事情变得复杂,但你最好为不同的用例定义额外的功能。