2014-02-13 42 views
2

我正在试图制作一个存储有关文章的基本信息的模型还存储当前登录用户的名称,这可能吗?还是需要在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”自动存储当前日期一样?

回答

1

您需要在视图中执行此操作,因为模型不知道它从哪里创建。通过commit=Falseform.save()方法,因此不提交数据到数据库,设置从请求作者,然后手动保存:

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

我想实现你的答案,但我''models.py'失败。我如何访问'models.py'中的'article.author'? – pebox11

5

你需要照顾这个视图:

# 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') 
相关问题