Python django中的注释形式为';不要保存新的评论

Python django中的注释形式为';不要保存新的评论,python,django,Python,Django,我为网站上的文章创建了一个新的评论表单。当我添加来自django admin的新评论时,一切正常,但当我尝试直接从细节页面添加新评论时,什么都没有发生,我正在重定向到包含文章列表的页面。 这是我的档案 models.py: class Komentarz(models.Model): post = models.ForeignKey(Wpisy, related_name="komentarze", verbose_name="Komentarze do artykułu", on_de

我为网站上的文章创建了一个新的评论表单。当我添加来自django admin的新评论时,一切正常,但当我尝试直接从细节页面添加新评论时,什么都没有发生,我正在重定向到包含文章列表的页面。 这是我的档案 models.py:

class Komentarz(models.Model):
    post = models.ForeignKey(Wpisy, related_name="komentarze", verbose_name="Komentarze do artykułu", on_delete=models.CASCADE)
    name = models.CharField(max_length=80, verbose_name="Imię")
    email = models.EmailField(verbose_name="Email")
    content = models.TextField(verbose_name="Treść komentarza")
    created_date = models.DateTimeField(verbose_name="Utworzono", auto_now_add=True)
    active = models.BooleanField(verbose_name="Aktywny?", default=True)

    class Meta:
        ordering = ('created_date',)
        verbose_name="Komentarz"
        verbose_name_plural="Komentarze"

    def __str__(self):
        return 'Komentarz dodany przez {} dla strony {}'.format(self.name, self.post)
与细节的功能相抗衡

from django.shortcuts import render, get_object_or_404
from .models import Wpisy, Komentarz
from .forms import KomentarzeForma
....
def detale_bajki(request, slug, ):
    detale_bajki = get_object_or_404(Wpisy, slug=slug)
    komentarze = detale_bajki.komentarze.filter(active=True)
    if request.method == 'POST':
        formularz_komentarza = KomentarzeForma(data=request.POST)
        if formularz_komentarza.is_valid():
            nowy_komentarz = formularz_komentarza.save(commit=False)
            nowy_komentarz.detale_bajki = detale_bajki
            nowy_komentarz.save()
    else:
        formularz_komentarza = KomentarzeForma()
        return render(request, 'bajki/detale_bajki.html', {'detale_bajki': detale_bajki, 'komentarze': komentarze, 'formularz_komentarza': formularz_komentarza})
forms.py

from .models import Komentarz
from django import forms


class KomentarzeForma(forms.ModelForm):
    class Meta:
        model = Komentarz
        fields = ('name', 'email', 'content')
和detail.html

...
                {% with komentarze.count as total_komentarze %}
                <h2>
                {{ total_komentarze }} komentarz{{ total_komentarze|pluralize:"y" }}
                </h2>
                {% endwith %}

                {% for komentarz in komentarze %}
                Komentarz dodany przez <strong>{{komentarz.name}}</strong>
                {{komentarz.created_date}}
                <p>
                {{ komentarz.content|linebreaks }}<br>
                {% empty %}
                <p>Nie dodano jeszcze żadnych komentarzy</p>
                {% endfor %}

                {% if nowy_komentarz %}
                <h2>Twój komentarz został dodany</h2>
                {% else %}
                <h2>Dodaj nowy komentarz</h2>
                <form action="." method="post">
                {{formularz_komentarza.as_p}}
                {% csrf_token %}
                <p><input type="submit" value="Dodaj komentarz"></p>
                </form>
                {% endif %}
试用:

nowy_komentarz.post = detale_bajki
...
return render(request, 'html page', {'key': 'what you want to return to your context'}) # don't fornget to add some return to your view.
您的url模式是

path('bajki/<slug>', views.detale_bajki, name='detale_bajki')
这意味着您正在提交到
/bajki/
,这是错误的URL

您可以通过向url添加一个尾随斜杠(这在Django url中很常见)来修复此问题


调用
nowy\u komentarz.save()
后,您的
detale\u bajki
视图未返回响应。检查缩进。请同时显示您的URL。在you
detail.html
中,表单未传递
slug
,这是
视图中的一个参数。detale_bajki
。我已尝试更改您的编写方式。但还是没什么:(对不起,Eliakim,但我想我不明白你的意思。它是什么意思?我正在尝试猜测解决方案。你可以使用pdb自己调试它:#在视图开始时导入pdb pdb.set_trace()看看我打赌你的表单没有通过是有效的()方法.Ok我添加了line import pdb;pdb.set_trace(),现在在控制台中我只有这个:>c:\projekty\public_python\bajki\views.py(2)(->from django.shortcuts导入渲染,获取对象或_404(pdb)。如何检查错误?当然,当我实现PDB时,localhost会停止工作。只需对每一行按“n”和“enter”,然后检查代码在哪一行中断。这只是为了可视化代码流。
path('bajki/<slug>', views.detale_bajki, name='detale_bajki')
<form action="." method="post">
path('bajki/<slug>/', views.detale_bajki, name='detale_bajki')
<form action="{% url 'detale_bajki' detale_bajki.slug %}" method="post">