2012-05-07 84 views
1

我在想如何在另一個模型中訪問用戶的數據?例如,這是我目前的情況。在Django模型中訪問經過身份驗證的用戶信息

  • 用戶擁有公司的外鍵;所以用戶與公司相關聯。
  • 我已經實現了一個文件上傳頁面。此頁面使用自定義存儲解決方案,將文件上傳到Amazon S3。 (它基於S3BotoStorage)。
  • 在此構造函數中,我想訪問與該公司關聯的bucket_name,該公司與用戶鏈接。我的所有用戶都必須登錄才能使用上傳頁面。
  • 因此:登錄用戶擁有公司的foreignKey,公司擁有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) 

這是我設置爲我default_storage存儲模型在settings.py中:

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或template,我可以通過它有一個參數,並在以後檢索它?我可以直接在模型中檢索這些信息嗎?任何想法如何做到這一點?

謝謝!

編輯:這與用戶這樣做,因爲用戶將包含ForeignKey的將它連接到該公司,而該公司將包含有關桶...

編輯#2:我只是想self.object.user = self.request.user在form_save中,它的工作原理,但我怎麼能超越這個,並訪問我用UserProfile類擴展用戶時添加的字段?例如:

self.object.user = self.request.user 
self.company = self.object.user.company.bucket 

因此,公司是用戶擴展配置文件中的foreign_key,並且公司包含存儲區字段。

+1

我真的很困惑。這與用戶有什麼關係?您可以通過self.request.user從form_valid()獲取當前用戶。那是你的追求? – Paragon

+0

查看編輯瞭解更多信息!感謝 – abisson

+0

你在找'user.get_profile()'? https://docs.djangoproject.com/en/1.4/topics/auth/#django.contrib.auth.models.User.get_profile – rantanplan

回答

0

您無法更改用戶,因此我假設您的外鍵位於配置文件中。你可能想要使用self.request.user。 get_profile() .company.bucket。確保你已經通過在你的settings.py中設置AUTH_PROFILE_MODULE正確配置你的配置文件模塊

相關問題