我无法找到这个问题的答案,我猜这对Django来说非常容易。
我只想在模型中定义author
字段,如下所示:
class Article(models.Model):
author = models.ForeignKey(User)
似乎没有像author = models.ForeignKey(User, default=current_user)
这样的简单方法,那么将当前登录用户存储在数据库中的最简单方法是什么? (如果没有登录,可以使用名为"匿名"的预定义默认用户)
感谢您的帮助!
答案 0 :(得分:2)
当前登录的用户在视图中可用作request.user
属性:
def create_article(request):
...
if request.user.is_active():
article.author = request.user
article.save()
...
答案 1 :(得分:0)
或者,您可以将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
稍微多一些代码,但它封装在表单类中而不是视图中,因此您可以在多个位置使用它。
使用示例:
# 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
在任何一种使用案例中,您都可以放心,您拥有经过身份验证的用户。