簡體   English   中英

Django如何在models.py中獲取用戶名?

[英]Django how to get username in models.py?

我需要在我的models.py文件中獲取用戶名

模型的這一部分:

X = models.FileField(max_length=255, upload_to=get_upload_file_name, blank=True)

調用此函數:

def get_upload_file_name(instance, filename):
    return "uploaded_files/%s_%s" % (str(time()).replace('.','_'), filename)

但我想在文件名中添加用戶名。 在這種情況下,有人可以建議我如何請求用戶名並以字符串形式獲取嗎?

更新:

@login_required
def addnew(request):
    if request.POST:
        form = PForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()   

            return HttpResponseRedirect('/all')

    else:
        form = PForm()

    args = {'full_name': request.user.username}
    args.update(csrf(request))

    args['form'] = form

    return render(request, 'addnew.html', args)

get_upload_file_name的第一個參數instance是文件所屬的模型實例,如果該模型具有username get_upload_file_name段,則可以通過以下方式簡單地訪問: instance.username

根據您的更新, views.py以下代碼應允許您在對對象調用save()之前傳遞用戶名:

...
if form.is_valid():
        obj = form.save(commit=False)
        obj.YOUR_FILE_FIELD = obj.get_upload_file_name(request.user, filename)
        obj.save() 
...

請注意form.save(commit=False)將返回一個對象,該對象尚未保存到數據庫中( https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-方法

需要對模型本身的get_upload_file_name方法進行如下更新:

def get_upload_file_name(username, filename):
    return "uploaded_files/%s_%s_%s" % (username, str(time()).replace('.','_'), filename)

暫無
暫無

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

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