在models.py文件中获取当前登录的Django用户?
问题描述:
我正在试图制作一个存储有关文章的基本信息的模型还存储当前登录用户的名称,这可能吗?还是需要在views.py文件中完成。在models.py文件中获取当前登录的Django用户?
这里是我的代码:
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”自动存储当前日期一样?
答
您需要在视图中执行此操作,因为模型不知道它从哪里创建。通过commit=False
到form.save()
方法,因此不提交数据到数据库,设置从请求作者,然后手动保存:
if form.is_valid():
article = form.save(commit=False)
article.author = request.user
article.save()
return HttpResponseRedirect('/articles/all')
答
你需要照顾这个视图:
# 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')
我想实现你的答案,但我''models.py'失败。我如何访问'models.py'中的'article.author'? – pebox11