Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中保存用户?_Django_Django Models_Django Users - Fatal编程技术网

如何在Django中保存用户?

如何在Django中保存用户?,django,django-models,django-users,Django,Django Models,Django Users,我找不到这个问题的答案,我猜这个问题对Django来说很容易 我只想在模型中定义一个author字段,如下所示: class Article(models.Model): author = models.ForeignKey(User) 似乎没有像author=models.ForeignKey(User,default=current\u User)这样简单的方法,那么在数据库中存储当前登录的用户最简单的方法是什么呢?(如果未登录,可以使用名为“匿名”的预定义默认用户) 谢谢你的帮助

我找不到这个问题的答案,我猜这个问题对Django来说很容易

我只想在模型中定义一个
author
字段,如下所示:

class Article(models.Model):
    author = models.ForeignKey(User)
似乎没有像
author=models.ForeignKey(User,default=current\u User)
这样简单的方法,那么在数据库中存储当前登录的用户最简单的方法是什么呢?(如果未登录,可以使用名为“匿名”的预定义默认用户)


谢谢你的帮助

当前登录的用户在视图中可用作
请求。用户属性:

def create_article(request):
   ...
   if request.user.is_active():
       article.author = request.user                          
   article.save()
   ...

或者,您可以将
request.user
传递给表单类并覆盖保存:

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article

    def __init__(self, *args, **kwargs):
        # Allows you to pass the user in from the request, or just set the property
        if not hasattr(self, 'user'):
            self.user = kwargs.pop('user')
        super(ArticleForm, self).__init__(*args, **kwargs)

    def save(self, commit=True)
        article = super(ArticleForm, self).save(commit=False)
        article.user = self.user
        if commit:
            article.save()
        return article
代码稍微多一点,但它封装在form类中,而不是视图中,因此您可以在多个位置使用它

用法示例:

# in a view
@login_required
def your_view(request):
    form = ArticleForm(request.POST or None, user=request.user)
    . . .

# in Django admin
class ArticleAdmin(admin.ModelAdmin):

    form = ArticleForm

    def get_form(self, request, obj=None, **kwargs):
        form = super(ArticleAdmin, self).get_form(request, obj, **kwargs)
        form.user = request.user
        return form

在任何一种情况下,您都可以确信您拥有经过身份验证的用户。

谢谢。因此,我想确保我不能仅通过更改模型来做到这一点?我会稍微进一步修改和/或使用
request.user.is\u active()
No,您不能在模型级别执行此操作。@warath coder感谢您的更正,我更新了答案。