class StorageModel(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="profile", null=False)
file_meta = models.ImageField(storage=UserDataStorage(profile=user), blank=False, null=False)
class UserDataStorage(S3Boto3Storage):
location = common.AWS_LOCATION_TEST
file_overwrite = False
def __init__(self, *args, **kwargs):
for k, v in kwargs.items():
print("omg")
print(v)
super(UserDataStorage, self).__init__(*args, **kwargs)
如何将字段user
作为对象UserDataStorage
的参数传递?
这里的问题是,字段user
被传递为UserDataStorage
,但类型为<django.db.models.fields.related.ForeignKey>
。我要在这里配置文件实例。
这在Django中可以实现吗?
答案 0 :(得分:1)
这不可能是您描述的方式。目前(初始化代码时)没有要发送的请求/用户对象。
您可以按照文档中的说明将可调用对象传递给upload_to kwarg。
这样,在执行可调用对象时,将保存模型实例,并且此实例具有用户属性。
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class StorageModel(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="profile", null=False)
file_meta = models.ImageField(
upload_to=user_directory_path,
storage=UserDataStorage(),
blank=False, null=False
)