Получение id экземпляра в форме и сохранение в ней

Я создаю приложение для блога и работаю над функцией, в которой A user can report comment поэтому я создал другую модель для хранения reports поэтому я сохраняю комментарий, о котором сообщается, но я разместил форму отчета в детальном представлении, поэтому форма отчета будет ниже комментария на странице подробного сообщения, в котором я не получаю comment id когда сообщаю.

models.py

class Blog(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=1000)

class Comment(models.Model):
    commented_by = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.CharField(max_length=1000)

class ReportComment(models.Model):
    reported_by = models.ForeignKey(User, on_delete=models.CASCADE)
    reported_comment = models.ForeignKey(Comment, on_delete=models.CASCADE)
    text = models.CharField(max_length=1000)

views.py

def blog_detail_page(request, blog_id):
    post = get_object_or_404(Blog, pk=blog_id)

    if request.method == 'POST':
        reportform = CommentReportForm(data=request.POST)
        if FlagCommentForm.is_valid():
            form = reportform.save(commit=False)
            # Saving in this line
            flagForm.reported_comment = reportform.id
            form.reported_by = request.user
            form.save()
            return redirect('home')

    else:
        reportform = CommentReportForm()




    context = {'reportform':reportform, 'post':post}
    return render(request, 'blog_detail_page.html', context)

blog_detail_page.html


{{post.title}}


{% for comment in post.comment_set.all %}

{{comment.body}}


<div class="container">
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <table>
        {{ reportform }}
        </table>
        <button type="submit">Save</button>
    </form>
</div>

{% endfor %}

Что я только не пробовал :-

  • Я также пробовал использовать цикл типа :-
comments = post.comment_set.all()

    for com in comments:
        if request.method == 'POST':
            ......
            if reportform.is_valid():
            ....
            ......
            ......
            form.reported_by = com

Но он всегда сохранял идентификатор первого комментария.

  • Затем я попробовал методом request.POST, Например :-
comment_ID = request.POST['comment_id']

Но показывается MultiValueDictKeyError ошибка.

Я пробовал много раз, но id комментария не сохраняется в экземпляре отчета.

Любая помощь будет очень признательна. Спасибо

Вам нужно добавить первичный ключ комментария в форму или в URL, по которому вы отправляете форму. Например, как скрытый элемент формы:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="hidden" name="comment_id" value="{{ comment.pk }}">
    <table>
    {{ reportform }}
    </table>
    <button type="submit">Save</button>
</form>

Альтернативный вариант - сделать URL, на который вы сообщаете о комментарии с:

urlpatterns = [
    path('comment/<int:comment_id>/report', some_view, name='report-comment')
]

затем вы можете отправить форму в это представление с помощью:

<form method="post" action="{% url 'report-comment' comment_id=comment.pk %}" enctype="multipart/form-data">
    {% csrf_token %}
    <table>
    {{ reportform }}
    </table>
    <button type="submit">Save</button>
</form>
Вернуться на верх