【发布时间】:2015-11-09 20:07:05
【问题描述】:
我正在尝试使用函数在 django 模型中设置默认图像。原因是我生成了图像(一个二维码),我想用与 request.user 关联的模型保存它,它正在使用 upload_to= 但默认失败,它似乎没有得到实例.
代码是: --models.py --
from django.db import models
from django.contrib.auth.models import User
import django.utils.timezone as timezone
from myproject.settings import MEDIA_ROOT
import os
def function1(instance, filename):
retun os.path.join(self.uid.username, str(instance.shortname), '.jpg')
def function2(instance):
return os.path.join(MEDIA_ROOT, str(instance.username), 'tmp.jpg')
class MyModel(models.Model):
uid = models.ForeignKey(User)
shortname = models.CharField()
qr = models.FileField(upload_to=function1, default=function2)
这使得 function2() 只需要 1 个参数(给定 0)
我也尝试像这样将 uid 作为参数传递给 function2:
def function2(uid):
username = uid.username
return os.path.join(MEDIA_ROOT, username, 'tmp.jpg')
class MyModel(models.Model):
uid = models.ForeignKey(User)
shortname = models.CharField()
qr = models.FileField(upload_to=function1, default=function2(uid))
但这也不起作用,给出一个 AttributeError 异常: “ForeignKey”对象没有“用户名”属性
关于如何告诉 django 上传本地生成的文件的任何想法(在 django 机器上的 MEDIA_ROOT/request.user.username/ 上生成)
谢谢!!
【问题讨论】:
-
为什么你会认为默认函数会被传递给实例?事实并非如此,而且情况一直如此。
标签: django django-models