Не отражает текущего пользователя в комментарии

Здравствуйте, я новичок в сообществе и в мире программирования, поэтому я надеюсь, что вы можете извинить мое невежество.

Я создаю приложение в стиле Instagram с помощью Django 3.2.5. Где у пользователей есть профили, которые они могут посещать и загружать фотографии. Я реализую систему комментирования, я почти закончил ее или так я думаю ... Оказывается, я застрял ...

При генерации комментария пользователем с зарегистрированным профилем, комментарий отображается как анонимный.

Я исследовал и оказалось, что в модели комментария я сделал связь с пользователем и профилем, указав параметр null как true. При удалении этого параметра и повторной отправке комментария к посту я получаю ошибку 'Not Null Constraint Failed' для profile_id и для user_id

(На изображении показаны первые комментарии, сделанные из админки. И последний с параметром null = true в модели)

Образец фотографии

Здесь я оставляю свой models.py

class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(User, on_delete=models.CASCADE)
profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
text = models.TextField(max_length=200)
created_date = models.DateTimeField(auto_now_add=True)

class Meta:
    ordering = ['created_date']    

def __str__(self):
    return self.text

Здесь я оставляю свой views.py

def create_comment(request, pk):
post = get_object_or_404(Post, pk=pk)

if request.method == "POST":
    form = CommentForm(request.POST)
    
    if form.is_valid():
        comment = form.save(commit=False)
        comment.post = post
        comment.save()
        return redirect('posts:feed')

else:
    form = CommentForm()
    
return render(request, 'posts/feed.html', {
    'form': form,
    })

Вот мой urls.py

urlpatterns = [
path(r'^post/(?P<pk>[0-9]+)/comment/$', create_comment, name='create'),]

Вот мой forms.py

class CommentForm(forms.ModelForm):
pass

class Meta:
    model = Comment
    fields = ['text']

Вот мой html

    <form action="{% url 'comments:create' pk=post.pk %}" method="POST" >
    {% csrf_token %}
    <div class="input-group">
        <input type="text" class="form-control" placeholder="Comment here" aria-label="text" name="text" value="{{ post.comment.pk}}" >
        <div class="input-group-append">
        <button class="btn btn-dark" type="submit" id="button-addon2"><i class="fas fa-comment"></i></button>
        </div>
    </div> 
</form>  

Заранее большое спасибо!

Вы должны связать атрибут .user с вошедшим пользователем, так:

from django.contrib.auth.decorators import login_required

@login_required
def create_comment(request, pk):
    if request.method == 'POST':
        form = CommentForm(request.POST, request.FILES)
    
        if form.is_valid():
            form.instance.post_id = pk
            form.instance.user = request.user
            form.save()
            return redirect('posts:feed')
    else:
        form = CommentForm()
    
    return render(request, 'posts/feed.html', {'form': form})

Используя .post_id = pk, мы больше не запрашиваем базу данных для получения первой должности, проверка выполняется при создании экземпляра Comment.


Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .


Примечание: Вы можете ограничить представления для аутентифицированных пользователей с помощью декоратора @login_required декоратора [Django-doc].

Вернуться на верх