簡體   English   中英

在models.py文件中獲取當前登錄的Django用戶?

[英]Get the currently logged in Django user in a models.py file?

我正在嘗試建立一個模型,該模型存儲有關文章的基本信息,並且還存儲當前登錄用戶的名稱,這可能嗎? 還是需要在views.py文件中完成的事情。

這是我的代碼:

from django.db import models
from time import time

from django.contrib.auth.models import User


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


# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(User.get_username()) #AUTOMATICALLY STORE USERNAME
    body = models.TextField()
    pub_date = models.DateTimeField(auto_now=True)
    likes = models.IntegerField(default=0)
    thumbnail = models.FileField(upload_to=get_upload_file_name)

    def __unicode__(self):
        return self.title

這是處理位於views.py中的Article模型的函數:

def create(request):
    if request.POST:
        form = ArticleForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()

            return HttpResponseRedirect('/articles/all')

    else:
        form = ArticleForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form 

    return render_to_response('create_article.html', args)

我該如何做,以便在創建新文章時,用戶名應該以“作者”的方式存儲,就像“ pub_date”自動存儲當前日期一樣?

您需要在視圖中進行以下處理:

# views.py
def create(request):
    if request.POST:
        form = ArticleForm(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.author = request.user
            instance.save()

            return HttpResponseRedirect('/articles/all')

    else:
        form = ArticleForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form 

    return render_to_response('create_article.html', args)

# models.py
class Article(models.Model):
    author = models.ForeignKey('auth.User')

您將需要在視圖中進行操作,因為模型不知道從何處創建模型。 commit=False傳遞給form.save()方法,這樣它就不會將數據提交到數據庫,從請求中設置作者,然后手動保存:

if form.is_valid():
    article = form.save(commit=False)
    article.author = request.user
    article.save()
    return HttpResponseRedirect('/articles/all')

暫無
暫無

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

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