Vol*_*pym 3 django django-models django-views
我不知道如何自动将当前用户名作为帖子的作者传递。
如果添加作者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)
Run Code Online (Sandbox Code Playgroud)
我的模型:
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]
Run Code Online (Sandbox Code Playgroud)
您可以在方法中修补对象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)Run Code Online (Sandbox Code Playgroud)
注意:您可以使用
LoginRequiredMixinmixin [Django-doc]将视图限制为基于类的视图,以供经过身份验证的用户使用 。
注意:文档建议使用
AUTH_USER_MODEL设置 [Django-doc]而不是get_user_model()[Django-doc]。这更安全,因为如果身份验证应用程序尚未加载,设置仍然可以指定模型的名称。因此最好这样写:Run Code Online (Sandbox Code Playgroud)from django.conf import settings class Post(models.Model): # … author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE )
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |