有没有办法将模型字段的值作为参数传递给同一模型中的 models.ImageField(storage=function)
Is there a way to pass the value of a model field as a parameter to models.ImageField(storage=function) within same Model
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>
。我想要一个 Profile 实例。
这在 Django 中可以实现吗?
不可能像你描述的那样。此时(初始化代码时)没有要发送的 request/user 个对象。
您可以按照文档中的说明将可调用对象传递给 upload_to kwarg。
这样当callable被执行时,你会得到模型实例被保存,这个实例有用户属性。
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
)
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>
。我想要一个 Profile 实例。
这在 Django 中可以实现吗?
不可能像你描述的那样。此时(初始化代码时)没有要发送的 request/user 个对象。
您可以按照文档中的说明将可调用对象传递给 upload_to kwarg。
这样当callable被执行时,你会得到模型实例被保存,这个实例有用户属性。
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
)