在Django中获取当前的logged_in用户

时间:2010-12-17 11:42:56

标签: python django

我正在使用Django开发博客,我希望我的帖子与他们的作者有关。我在我的Blog模型类中创建了一个author字段,它是一个指向User对象的ForeignKey。问题是,南数据库迁移django工具要求我提供一个默认值。实际上,我希望它是编辑帖子的登录用户的ID,但无法看到如何制作它。有什么想法吗?

这是我的Blog模型类:

class Blog(models.Model):
PUBLISHING_STATUS = (
    ('P', 'Published'),
    ('D', 'Draft'),
    ('AA', 'Awaiting Approval'),
    )
title = models.CharField(max_length=128, unique=True)
slug = models.SlugField(max_length=160, unique=True)
header_image = models.ImageField(upload_to='images/uploaded', max_length=256, null=True)
body = models.TextField()
author = models.ForeignKey(User)
status = models.CharField(max_length=2, choices=PUBLISHING_STATUS, null=True)
posted = models.DateTimeField('date posted')
category = models.ForeignKey('blog.Category')
tags = models.ManyToManyField('blog.Tags')

def __unicode__(self):
    return self.title

def get_absolute_url(self):
    return '/blog/%s/view_post' % self.slug

谢谢!

3 个答案:

答案 0 :(得分:3)

如果您希望需要该字段,则必须在迁移时设置默认值。由于您没有在任何地方存储任何关于谁创建帖子的数据,您只能将其设置为特定用户,在这种情况下可能应该是您的管理员用户!

然后,您可以编辑管理员中的帖子,并在必要时将其设置为正确的作者!

如果您想在管理员中保存新帖子时自动填充字段,则必须覆盖save_model上的ModelAdmin方法:

class BlogPostAdmin(model_admin):   

    def save_model(self, request, instance, form, change):
        user = request.user 
        instance = form.save(commit=False)
        if not change or not instance.author:
            instance.author = user
        instance.save()
        form.save_m2m()
        return instance

答案 1 :(得分:1)

  

问题是,南数据库迁移django工具要求我提供一个默认值。

为什么呢?因为您有旧数据要保留?也许你不应该试图保留任何旧数据。

  

实际上,我希望它是编辑帖子的登录用户的ID,但无法看到如何制作。有什么想法吗?

这就是视图功能的用途。您不在模型中执行此操作。您可以在处理表单的视图函数中执行此操作。

答案 2 :(得分:0)

您应该将此作为两个步骤来完成。首先,使用任何默认值执行模式迁移以创建新结构。然后,执行数据迁移以使用用户表中的正确值更新author列。