如何在Django中保存用户?
我找不到这个问题的答案,我猜这个问题对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)这样简单的方法,那么在数据库中存储当前登录的用户最简单的方法是什么呢?(如果未登录,可以使用名为“匿名”的预定义默认用户) 谢谢你的帮助
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感谢您的更正,我更新了答案。