Django / Как ссылаться на конкретные новости в мнениях, чтобы можно было оставить комментарий на сайте через форму?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Django / Как ссылаться на конкретные новости в мнениях, чтобы можно было оставить комментарий на сайте через форму?

Сообщение Anonymous »

При подаче формы на сайте значение «news_id» не втягивается в базу данных (в таблицу с комментариями).
Соответственно, неясно, какие новости остались комментарии, чтобы его можно было опубликовать позже. < /p>
В коде они не повлияют на проблему. /> Модели: < /p>

Код: Выделить всё

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>
формы: < /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>
Просмотры: < /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 %}
Я понимаю, что вам нужно каким -то образом получить объект модели новостей в файле представлений, но все методы, которые я нашел, не были успешными.

Подробнее здесь: https://stackoverflow.com/questions/733 ... le-to-leav
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»