django中的评论表没有保存新评论

时间:2018-01-24 17:35:03

标签: python django

我已经为网站上的文章创建了一个新的评论表单。当我从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)

具有详细功能的vies.py

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 %}

在models.py

中clas Wpisy
class Wpisy(models.Model):
    title = models.CharField(max_length=400, verbose_name="Tytuł")
    slug = models.SlugField(unique=True, max_length=400,verbose_name="Przyjazny adres url")
    content = models.TextField()
    status_audio = models.BooleanField(default=False, verbose_name="Czy dostępny będzie plik audio?")
    audio_file = models.FileField(upload_to='uploads/',verbose_name="Plik audio")
    created_date = models.DateTimeField(blank=True, null=True, verbose_name="Data utworzenia")
    category = models.ForeignKey(Kategorie, verbose_name="Kategoria", on_delete=models.CASCADE)

    class Meta:
        verbose_name="Wpis"
        verbose_name_plural="Wpisy"


    def __str__(self):
        return self.title

2 个答案:

答案 0 :(得分:1)

您的网址格式是

path('bajki/<slug>', views.detale_bajki, name='detale_bajki')

请注意,它没有尾部斜杠。您的表单的操作是"."

<form action="." method="post">

这意味着您要提交/bajki/,这是错误的网址。

您可以通过向网址添加尾部斜杠来解决此问题(这在Django网址中很常见)

path('bajki/<slug>/', views.detale_bajki, name='detale_bajki')

或者您可以将表单操作更改为""而不是"."。在评论中,您似乎通过将表单操作更改为{{ detale_bajki.slug }}来解决问题。

但是,对表单操作的这些更改很脆弱,如果再次更改URL模式,则可能会中断。最好的方法是使用{% url %}标记来反转正确的URL。

<form action="{% url 'detale_bajki' detale_bajki.slug %}" method="post">

答案 1 :(得分:0)

试试:

cars = Car.all.sort { |a,b| (a[:personal] || a[:business]) <=> (b[:personal] || b[:business])  }