我想知道我们如何在另一个模型中访问用户的数据?例如,这是我目前的情况。
- 用户拥有公司的外键;所以用户与公司相关联。
- 我已经实现了一个文件上传页面。此页面使用自定义存储解决方案,将文件上传到 Amazon S3。(它基于 S3BotoStorage)。
- 在此构造函数中,我想访问与该公司关联的 bucket_name,该公司与用户相关联。我的所有用户都必须登录才能使用上传页面。
- 所以:登录的用户有公司的外键,公司有bucket_name。登录用户在文件上传页面。
这是视图:
class PictureCreateView(CreateView):
model = Picture
def __init__(self, *args, **kwargs):
super(PictureCreateView, self).__init__(*args, **kwargs)
def form_valid(self, form):
self.object = form.save()
self.request.FILES.get('file')
data = [{'name': f.name, 'url': settings.MEDIA_URL + "pictures/" + f.name.replace(" ", "_"), 'thumbnail_url': settings.MEDIA_URL + "pictures/" + f.name.replace(" ", "_"), 'delete_url': reverse('upload-delete', args=[self.object.id]), 'delete_type': "DELETE"}]
response = JSONResponse(data, {}, response_mimetype(self.request))
response['Content-Disposition'] = 'inline; filename=files.json'
return response
这是图片模型(文件模型或其他)
from django.core.files.storage import default_storage as s3_storage
class Picture(models.Model):
def custom_upload_to(instance, filename):
return 'pictures/' + filename
def save(self, *args, **kwargs):
super(Picture, self).save(*args, **kwargs)
file = models.FileField(storage=s3_storage,upload_to=custom_upload_to)
这是我在 settings.py 中设置为我的 default_storage 的存储模型:
from storages.backends.s3boto import S3BotoStorage
class customStorage(S3BotoStorage):
def __init__(self, *args, **kwargs):
kwargs['bucket'] = ***HERE-I-WANT-TO-GET-COMPANY'S-BUCKET***
super(customStorage, self).__init__(*args, **kwargs)
从 from 或模板中,我可以传递它有一个参数并稍后检索它吗?我可以直接在模型中检索这些信息吗?关于如何做到这一点的任何想法?
谢谢!
编辑:这与用户有关,因为用户将包含与其链接的公司的 ForeignKey,并且该公司将包含有问题的 Bucket ...
编辑#2:我刚刚在 form_save 中尝试了 self.object.user = self.request.user并且它可以工作,但是我怎样才能超越它并访问我在使用 UserProfile 类扩展 User 时添加的字段?例如:
self.object.user = self.request.user
self.company = self.object.user.company.bucket
所以公司是用户扩展配置文件中的一个外键,公司包含一个桶字段。