1

我想知道我们如何在另一个模型中访问用户的数据?例如,这是我目前的情况。

  • 用户拥有公司的外键;所以用户与公司相关联。
  • 我已经实现了一个文件上传页面。此页面使用自定义存储解决方案,将文件上传到 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 

所以公司是用户扩展配置文件中的一个外键,公司包含一个桶字段。

4

1 回答 1

0

你不能改变用户,所以我假设你的外键在个人资料上。您可能想要使用 self.request.user。get_profile() .company.bucket。AUTH_PROFILE_MODULE通过在 settings.py 中进行设置,确保您已正确配置了配置文件模块

于 2012-05-07T17:54:03.800 回答