2015-10-07 33 views
0

我正在嘗試創建一個動態文件夾來爲每個用戶存儲一些csv文件。 我有DemoUser和文檔。這是1對N的關係。 我想將來自用戶的所有文檔存儲在其文件夾中,由用戶標識命名。如何在django模型中獲取當前用戶?

但我無法弄清楚如何去做。我無法獲取擁有者名稱。

這裏是我的代碼:

models.py

def get_upload_path(instance, filename): 
    now = timezone.now().strftime("%Y_%m_%d") 
    if(instance.owner.id is not None): 
     return 'graphs/documents/{0}/email/' + now +'_{1}'.format(instance.owner.id, filename) 

class Document(models.Model): 
    docfile = models.FileField(upload_to=get_upload_path, validators=[import_document_validator]) 
    owner = models.ForeignKey(DemoUser) 
    date_published = models.DateTimeField(_('date published'), default=timezone.now) 

views.py:

if request.method == 'POST': 
    form = DocumentForm(request.POST, request.FILES) 
    if form.is_valid(): 
     newdoc = Document(owner=DemoUser.objects.get(id=request.user.id)) 
     newdoc.save() 
     newdoc.docfile = request.FILES['docfile'] 
     newdoc.save() 

的文件上傳,但地址:

圖/文件/ {0} /email/2015_10_07_MOCK_DATA_2_qyt9xGe.csv

它沒有得到instance.owner.id值。我試圖在添加docfile之前保存文檔,嘗試將所有者設置爲對象並獲取owner.id值,但沒有成功。你能幫我麼?

非常感謝!

+1

請不要做像'DemoUser.objects.get(id = request.user.id)'這樣的事情。 'request.user'已經是那個確切的DemoUser實例,或者它根本不是DemoUser,在這種情況下,通過ID查詢是沒有意義的。 –

回答

1

它應該是:

return 'graphs/documents/{0}/email/{1}_{2}'.format(instance.owner.id, now, filename) 
+0

爲什麼不接受連接字符串? –

+0

你可以這樣做:'return'graphs/documents/{0}/email /'.format(instance.owner.id)+ now +'_ {0}'。format(filename)' – mishbah

+3

@JaquelinePassos - 它可以接受連接的字符串,但您的格式僅適用於最後一個字符串,通過將連接字符串合併爲一個,可以應用更多格式參數 – Sayse

0

一個簡單的方法,我發現每個用戶存儲文件創建動態目錄是創建一個字符串分配給代表該用戶名的實例模型的新方法。這僅適用於像這樣的簡單情況,您需要將當前用戶作爲字符串來幫助格式化文件路徑。

#models.py 
def get_upload_path(instance, filename): 
    now = timezone.now().strftime("%Y_%m_%d") 
    return 'graphs/documents/{0}/email/{1}_{2}'.format(instance.owner, now, filename) 

class Document(models.Model): 
    docfile = models.FileField(upload_to=get_upload_path) 
    date_published = models.DateTimeField(_('date published'), default=timezone.now) 

    def keep_owner(self,owner): 
     self.owner = owner 

#views.py 
if request.method == 'POST': 
    form = DocumentForm(request.POST, request.FILES) 
    if form.is_valid(): 
     newdoc = form.save(commit=False) 
     newdoc.keep_owner(request.user) 
     newdoc.save() 
相關問題