簡體   English   中英

如何在Django模型中獲取當前用戶?

[英]How to get current user in django model?

我正在嘗試創建一個動態文件夾來為每個用戶存儲一些csv文件。 我有DemoUser和文檔。 這是一對一的關系。 我想將用戶的所有文檔存儲在用戶ID命名的文件夾中。

但是我不知道該怎么做。 我找不到所有者的名字。

這是我的代碼:

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值,但沒有成功。 你能幫我么?

非常感謝!

它應該是:

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

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

#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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM