[英]Django: create a comment form when user is authenticated
I'm creating a simple blog application. 我正在创建一个简单的博客应用程序。 A user is logged in this application while He/She can comment any post on my blog application.
用户在此应用程序中登录后,他/她可以在我的博客应用程序中评论任何帖子。 But cant impletement that idea.
但是不能实现那个想法。 This is my models.py file
这是我的models.py文件
from django.db import models
# Create your models here.
from user.models import CustomUser
from django.conf import settings
from django.db import models
from django.urls import reverse
class BlogPost(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
blog_title=models.CharField(max_length=200)
blog_description=models.TextField()
blog_pub=models.DateTimeField(auto_now_add=True)
blog_update=models.DateTimeField(auto_now=True)
def __str__(self):
return self.blog_title
def get_absolute_url(self):
return reverse('blog:blog_post', kwargs={'pk': self.pk})
class Comment(models.Model):
blogpost=models.ForeignKey(BlogPost, on_delete=models.CASCADE)
comment=models.CharField(max_length=300)
author=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,blank=True, null=True)
author_name = models.CharField(max_length=50, default='anonymous', verbose_name=("user name"))
comment_pub = models.DateTimeField(auto_now_add=True)
comment_update = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('blog:home', kwargs={'pk':self.pk})
def __str__(self):
return self.comment
This is views.py file 这是views.py文件
class BlogPostSingle(DetailView, FormView):
model=BlogPost
template_name='blog/blog_post_single.html'
#fields = ['blog_title']
form_class = CreateCommentForm
success_url = '/blog/'
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
this is my forms.py file 这是我的forms.py文件
class CreateCommentForm(ModelForm):
class Meta:
model=Comment
fields = ('comment', 'blogpost')
and this is my html file and forms section 这是我的html文件和表单部分
{% if user.is_authenticated %}
<h5>Hi, {{user.name}} leave your comment now</h5>
<form action="" method="post">
{% csrf_token %} {{form.as_p}}
<input type="submit" value="Submit comment">
</form>
{% else %}
<p>You're not logged in this site, please <a href="{% url 'login' %}">log</a> in for comment </p>
{% endif %}
My target Idea: Just user logged on my blog application. 我的目标想法:只是用户登录了我的博客应用程序。 He can be able to comment any post on my blog application.
他可以在我的博客应用程序中评论任何帖子。 And my Comment Models contain two forignkey field.
我的评论模型包含两个外键字段。
You should pass the user to your view's context, so it will be available in the template: 您应该将用户传递到视图的上下文,因此它将在模板中可用:
class BlogPostSingle(DetailView, FormView):
...
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['user'] = self.request.user
return context
on get_context_data
see https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-display/#detailview 有关
get_context_data
请参见https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-display/#detailview
on self.request
see https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-display/#dynamic-filtering 有关
self.request
请参见https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-display/#dynamic-filtering
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.