Почему при создании комментария создается его дубликат?
Добавляю комментарий и создается его дубликат в виде ответа.
views.py
class MoreDetailsQuestion(SuccessMessageMixin, FormMixin, DetailView):
model = Questions
template_name = 'blog/more_q.html'
pk_url_kwarg = 'q_pk'
context_object_name = 'more_q'
form_class = AnswerForm
success_url = reverse_lazy('question')
success_msg = 'Запись успешно обновлена'
def get_success_url(self):
return reverse_lazy('question', kwargs={'q_pk':self.get_object().id})
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = context['more_q']
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
if request.POST.get("parent", None):
parent_id = int(request.POST.get("parent"))
if parent_id:
parent_obj = Answer.objects.get(id=parent_id)
if parent_obj:
replay_comment = form.save(commit=False)
replay_comment.parent = parent_obj
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.post = self.get_object()
self.object.author = self.request.user
self.object.save()
return super().form_valid(form)
шаблон
<form action="." method="post" id="formReview">
{% csrf_token %}
<input type="hidden" name="parent" id="contactparent" value="">
<p><textarea id='contactcomment' rows="5" cols="45" name="text"></textarea></p>
<p><input type="submit" value="Добавить ответ"></p>
</form>
{% for i in more_q.get_answer %}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<div class="container">
<div class="row">
<div class="col-md-8">
<div class="media g-mb-30 media-comment">
{% if user.photo %}
<img class="d-flex g-width-50 g-height-50 rounded-circle g-mt-3 g-mr-15" src="{{i.author.photo.url}}" alt="Image Description">
{%else%}
<img class="d-flex g-width-50 g-height-50 rounded-circle g-mt-3 g-mr-15" src="{% static 'blog/img/regular_user.jpg'%}" alt="Image Description">
{%endif%}
<div class="media-body u-shadow-v18 g-bg-secondary g-pa-30">
<div class="g-mb-15">
<h5 class="">просто ответ</h5>
<h5 class="h5 g-color-gray-dark-v1 mb-0"><a href="{% url 'show_other_profiles' i.author.id %}">{{i.author}}</a></h5>
<span class="g-color-gray-dark-v4 g-font-size-12">{{ i.created|date:"d.m.Y" }}</span>
</div>
<p>{{ i.text }}</p>
<li class="list-inline-item ml-auto">
<a class="u-link-v5 g-color-gray-dark-v4 g-color-primary--hover" href="#formReview" onclick="addReview('{{i.author}}', '{{i.id}}')">
<i class='fa fa-reply g-pos-rel g-top-1 g-mr-3'></i>
Reply
</a>
</li>
</ul>
</div>
</div>
</div>
{% for x in more_q.answer_set.all %}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<div class="container">
<div class="row">
<div id='text_answer_answer' class="col-md-7">
<div class="media g-mb-30 media-comment">
{% if user.photo %}
<img class="d-flex g-width-50 g-height-50 rounded-circle g-mt-3 g-mr-15" src="{{x.author.photo.url}}" alt="Image Description">
{%else%}
<img class="d-flex g-width-50 g-height-50 rounded-circle g-mt-3 g-mr-15" src="{% static 'blog/img/regular_user.jpg'%}" alt="Image Description">
{%endif%}
<div class="media-body u-shadow-v18 g-bg-secondary g-pa-30">
<div class="g-mb-15">
<h5>ответ на ответ</h5>
<h5 class="h5 g-color-gray-dark-v1 mb-0"><a href="{% url 'show_other_profiles' x.author.id %}">{{x.author}}</a></h5>
<span class="g-color-gray-dark-v4 g-font-size-12">{{ x.created|date:"d.m.Y" }}</span>
</div>
<p>{{ x.text }}</p>
<li class="list-inline-item ml-auto">
<a class="u-link-v5 g-color-gray-dark-v4 g-color-primary--hover" href="#formReview" onclick="addReview('{{x.author}}', '{{x.id}}')">
<i class='fa fa-reply g-pos-rel g-top-1 g-mr-3'></i>
Reply
</a>
</li>
</ul>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
models.py
class Question(modesl.Model):
...
...
def get_answer(self):
return self.answer_set.filter(parent__isnull=True)
class Answer(models.Model):
post = models.ForeignKey(Questions,on_delete=models.CASCADE,null=True)
...
parent = models.ForeignKey(
'self', verbose_name="Родитель", on_delete=models.SET_NULL, blank=True, null=True,
)
author = models.ForeignKey(MyUserProfile, on_delete=models.CASCADE,verbose_name='Автор комментария',default='')
{% for x in more_q.answer_set.all %} - извлекает весь QuerySets из модели answer, поэтому есть предположение что виновник именно он