Моя форма комментариев в django не работает?Это ни отправка данных в БД, ни их отображение? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать форму комментария в django, где люди могут комментировать ниже моего банка, я много чего пробовал, но у меня нет подходящего решения. Я надеюсь, что получу это здесь.

Вот моя модель для комментария

class Comments(models.Model):
    post = models.ForeignKey('app.Post', related_name='comments')
    author = models.CharField(max_length=200)
    text = models.TextField()

Вот форма для комментария

from django import forms
from .models import Comments

class CommentForm(forms.ModelForm):

        class Meta:
            model = Comments
            fields = '__all__'

        widgets = {
        'comment':forms.Textarea(attrs = {'class':'form-control'}),
        'name':forms.TextInput(attrs = {'class':'form-control'})

        }

Here,s the views.py code

    class BlogDetail(DetailView):
        model = Post
        context_object_name = 'blog_object'
        template_name = 'app/blog.html'

def add_comments(request, pk):

    if request.method == 'POST':
        email = request.POST['email']
        text = request.POST['text']
        form = CommentForm()
        form.email = email
        form.text = text
        form.save()


        return render(request,'app/blog.html')

И, наконец, вот секция комментариев моего blog.html

<div id="comments" class="comments-area">
<div id="respond" class="comment-respond">
 <h3 id="reply-title" class="comment-reply-title">Leave a Comment</h3>
<form action="#" method="post" id="commentform" class="comment-form" novalidate="">
 {% csrf_token %}
<div class="form-group form-group-with-icon comment-form-email">
<input id="email" class="form-control" name="email" type="text" placeholder="Your Email" value="" size="10" aria-required="true">
<div class="form-control-border"></div>
 <i class="form-control-icon fa fa-envelope"></i>
 </div>
 <div class="form-group form-group-with-icon comment-form-message">
<textarea id="comment" class="form-control" name="comment" placeholder="Your 
Comment" cols="2" rows="8" aria-required="true" style="resize: none;"></textarea>
 <div class="form-control-border"></div>
 <i class="form-control-icon fa fa-comment"></i>
</div>
<p class="form-submit">
<input name="submit" type="submit" id="submit" class="submit" value="Post Comment/">
</p>
</form>
</div>
</div>

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вы забыли передать фактические данные в форму

form = CommentForm(data={ "email": email, "text": text })
if form.is_valid()
    instance = form.save(commit=False)
    instance.author = request.user
    instance.save()
0 голосов
/ 23 февраля 2019

Ваша модель не имеет поля электронной почты, и вы должны проверить, что ваша форма действительна или нет, затем сохраните ее.

class InstallmentForm(ModelForm):
    class Meta:
        model = InstallmentModel
        fields = ['nationalNumber']

#if use FormView
class InstallmentView(generic.FormView):
    form_class = InstallmentForm

    def form_invalid(self, form):
        return super(InstallmentView, self).form_invalid(form)

    def form_valid(self, form):
        # statements
        return super(InstallmentView, self).form_valid(form)

или вы можете передать свои данные в форму, а затем подтвердить ее:

class InstallmentView(generic.TemplateView):
    def post(self, request, *args, **kwargs):
        nationalNumber = request.POST['nationalNumber']

        form = InstallmentForm(data={
            'nationalNumber': nationalNumber
        })

        if form.is_valid():
            InstallmentModel.objects.create(
               nationalNumber=nationalNumber
            )
           #OR
           form.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...