Django / Wie kann man sich auf bestimmte Nachrichten in Ansichten beziehen, damit es möglich ist, einen Kommentar auf dePython

Python-Programme
Anonymous
 Django / Wie kann man sich auf bestimmte Nachrichten in Ansichten beziehen, damit es möglich ist, einen Kommentar auf de

Post by Anonymous »

Bei der Übermittlung eines Formulars auf der Site wird der Wert "News_id" nicht in die Datenbank eingezogen (in die Tabelle mit Kommentaren). />

Code: Select all

class News(models.Model):
title = models.CharField(max_length=255, verbose_name="Заголовок")
slug = models.CharField(max_length=255, unique=True, db_index=True, verbose_name="URL")
content = models.TextField(verbose_name="Содержимое")
photo = models.ImageField(upload_to="news/%Y/%m/%d/", verbose_name="Изображение")
video = models.URLField(max_length=255, blank=True, null=True, verbose_name="Ссылка на видео")
time_update = models.DateTimeField(auto_now=True, verbose_name="Время изменения")
category = models.ForeignKey("NewsCategories", on_delete=models.PROTECT, verbose_name="Категория")

def __str__(self):
return self.title

def get_absolute_url(self):
return reverse("show_news", kwargs={"news_slug": self.slug})

class Meta:
verbose_name = "Новость"
verbose_name_plural = "Новости"
ordering = ["-time_update"]

class Comments(models.Model):
news = models.ForeignKey(
News,
on_delete=models.CASCADE,
related_name='comments_news',
verbose_name="Новость"
)
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Автор комментария")
time_create = models.DateTimeField(auto_now_add=True, verbose_name="Время создания")
content = models.TextField(verbose_name="Содержимое")
status = models.BooleanField(verbose_name="Публикация комментария", default=False)

def __str__(self):
return self.content

class Meta:
verbose_name = "Комментарий"
verbose_name_plural = "Комментарии"
ordering = ["-time_create"]
< /code>
Formulare: < /p>
class CommentForm(forms.ModelForm):
content = forms.CharField(
label='Добавить комментарий',
widget=forms.Textarea(attrs={'rows': '4', 'class': 'form-control'}))

class Meta:
model = Comments
fields = ['content']
< /code>
utils: < /p>
class DataMixin:

def get_user_context(self, **kwargs):
context = kwargs
cats = NewsCategories.objects.annotate(Count('news'))
context["cats"] = cats
if "category_selected" not in context:
context["category_selected"] = 0
return context
< /code>
Ansichten: < /p>
class ShowNews(DataMixin, DetailView, FormView):
model = News
template_name = "main_app/show_news.html"
slug_url_kwarg = "news_slug"
context_object_name = "news"
form_class = CommentForm

def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
c_def = self.get_user_context(title=context["news"])
return dict(list(context.items()) + list(c_def.items()))

def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.user = request.user
comment.save()
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
return render(request, self.template_name, self.get_context_data())
< /code>
html: < /p>

{% with news.comments_news.count as comments %}

Комментарии ({{ comments }})

{% endwith %}

{% for comment in news.comments_news.all %}
{{ comment.user }} написал(а) {{ comment.time_create }}
{{ comment.content|linebreaks }}

{% endfor %}

{% if user.is_authenticated %}

{% csrf_token %}
{{ form.non_field_errors }}
{% for f in form %}

{{ f.label }}:
{{ f }}

{{ f.errors }}
{% endfor %}

Отправить


{% endif %}
Ich verstehe, dass Sie das Nachrichtenmodellobjekt irgendwie in der Ansichtsdatei erhalten müssen, aber alle Methoden, die ich gefunden habe, waren nicht erfolgreich.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post