добавление комментариев из формы Джанго - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь добавить форму на мою страницу themes.html, чтобы пользователь мог оставить комментарий. Когда пользователь отправляет комментарий, я хочу отобразить, кто оставил комментарий, а также время и дату (см. Изображение)

enter image description here

Когда я отправляю данные, я получаю следующую ошибку:

enter image description here

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

views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect, Http404
from django.urls import reverse
from django.contrib.auth.decorators import login_required

from comments.models import Comment
from .models import Category, Entry, Topic
from .forms import CategoryForm, TopicForm, EntryForm, CommentForm


def topic(request, entry_id):
    """Show entry for single topic"""
    topic = Topic.objects.get(id=entry_id)
    entries = topic.entry_set.all()
    comments = Comment.objects.all()

    if request.method != 'POST':
        # No comment submitted
        form = CommentForm()
    else:
        # Comment posted
        form = CommentForm(data=request.POST)
        if form.is_valid():
            new_comment = form.save(commit=False)
            new_comment.user = request.user
            form.save()
            return HttpResponseRedirect(reverse('blogging_logs:topic'))

    context = {'topic': topic, 'entries': entries, 'comments': comments, 'form': form}
    return render(request, 'blogging_logs/topic.html', context)

forms.py

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['content']
        labels = {'text': ''}
        widgets = {'text': forms.Textarea(attrs={'cols': 80})}

приложение для комментариев: model.py

from django.db import models
from django.conf import settings

from blogging_logs.models import Topic
# Create your models here.


class Comment(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    content = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.content)

1 Ответ

0 голосов
/ 04 сентября 2018

В вашей модели комментариев есть Foreignkey to Topic, и вы не указали, что она может быть нулевой. Затем у вас есть форма, которая создает экземпляры комментариев, помещая что-то в поле «контент». По определению это означает, что поле вашей темы пустое или пустое, что недопустимо. Просто добавьте его аналогично тому, как вы добавляете пользователя, т.е.

new_comment = form.save(commit=False)
new_comment.user = request.user
new_comment.topic = topic
form.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...