我不知道如何自动将当前用户的姓名作为帖子的作者。
如果添加作者fields = ['headline', 'quote', 'author']
,则会显示并传递下拉菜单,但我需要登录用户的名称为默认名称。
我的观点:
class PostCreate(CreateView):
model = Post
user = User
fields = ['headline', 'quote']
success_url = '/index'
template_name = 'base_homepage.html'
@login_required()
def get_context_data(self, **kwargs):
kwargs['latest_posts_list'] = Post.objects.order_by('-id')
return super(PostCreate, self).get_context_data(**kwargs)
我的模特:
class Post(models.Model):
_id = models.ObjectIdField
headline = models.TextField(max_length=255)
quote = models.TextField(max_length=140)
creation_time = models.DateTimeField(editable=False).auto_now_add
author = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
)
def __str__(self):
return self.headline[:25]
答案 0 :(得分:2)
您可以使用form_valid
方法修补对象:
from django.contrib.auth.mixins import LoginRequiredMixin
class PostCreate(LoginRequiredMixin, CreateView):
model = Post
fields = ['headline', 'quote']
success_url = '/index'
template_name = 'base_homepage.html'
def get_context_data(self, **kwargs):
kwargs['latest_posts_list'] = Post.objects.order_by('-id')
return super(PostCreate, self).get_context_data(**kwargs)
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
注意:您可以将视图限制为基于类的视图,以使用
LoginRequiredMixin
mixin [Django-doc]。
注意:documentation建议 使用
AUTH_USER_MODEL
setting [Django-doc]get_user_model()
[Django-doc]。 这样比较安全,因为如果尚未加载身份验证应用,则设置 仍可以指定模型名称。因此最好写:from django.conf import settings class Post(models.Model): # … author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE )