by Anonymous » 17 Aug 2025, 00:07
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.
Bei der Übermittlung eines Formulars auf der Site wird der Wert "News_id" nicht in die Datenbank eingezogen (in die Tabelle mit Kommentaren). />[code]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 %}
[/code]
Ich verstehe, dass Sie das Nachrichtenmodellobjekt irgendwie in der Ansichtsdatei erhalten müssen, aber alle Methoden, die ich gefunden habe, waren nicht erfolgreich.