Как исправить ошибку «Публикация с этим пользователем уже существует» в Django при попытке добавить новую публикацию?

У меня есть представление create_post, через которое я пытаюсь добавить новый пост в блог, над которым работаю. Однако, когда я нажимаю «Отправить» после заполнения формы, которая включает пользователя (выпадающее меню всех зарегистрированных пользователей), заголовок и текст, я получаю сообщение с этим пользователем, которое уже существует. Как видно ниже, у post.user есть внешний ключ User. Не означает, что у одного поста может быть только один пользователь (автор), а у пользователя может быть много постов. Почему я не могу добавить еще один пост от того же пользователя?

Кроме того, как мне использовать встроенные компоненты Django для отображения сообщения, такого как «Публикация как {{user.username}}» или «Комментарий как {{user.username}}», если пользователь аутентифицирован.

Вместо того, чтобы записывать имя пользователя в текстовом поле при оставлении комментария, я хотел бы получить имя пользователя, если пользователь вошел в систему, и не просить пользователя писать имя пользователя в текстовом поле, поскольку я считаю, что это не имеет смысла. Я думаю, что мне может понадобиться использовать виджеты в forms.py и, возможно, использовать HiddenInputs()?

Прошу прощения, если нарушаю какие-либо правила сообщества, так как я недавно присоединился к этому сообществу и все еще пытаюсь разобраться в нормах и правилах.

модели.py

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    published_date = models.DateTimeField(auto_now=True)

    def summary(self):
        """Return a summary for very long posts to
        get a glimpse from admin panel"""
        return self.text[:100]

    def pub_date_pretty(self):
        return self.published_date.strftime('%b %e, %Y')

    def __str__(self):
        """String representation"""
        return self.title

    def get_absolute_url(self):
        """Returns the url to access a detailed post"""
        return reverse('post-detail', kwargs = {"pk": self.pk})

    class Meta:
        ordering = ['-published_date']
        unique_together = ('user',)

формы.py

from django import forms
from .models import Post, Comment

class PostForm(forms.ModelForm):
    class Meta():
        model = Post
        fields = ['user', 'title', 'text',]


class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('user', 'text',)

просмотры.py

from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from .models import Post, Comment
from django.utils import timezone
from django.views.generic import ListView, DetailView
from .forms import PostForm, CommentForm
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def create_post(request):
    if request.method == 'POST':
        post_form = PostForm(request.POST)

        if post_form.is_valid():
            post = post_form.save(request)
            post.save()
        else:
            print(post_form.errors)
    else:
            post_form = PostForm()

    context = {
        'post_form': post_form,
    }

    return render(request, 'blog/addpost.html', context )

def add_comment_to_post(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('post-detail', pk=pk)

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
496
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Post.Meta вы определили ограничение unique_together только с пользователем. Это должно быть удалено

class Meta:
    ordering = ['-published_date']
    unique_together = ('user',)  # This line here

Другие вопросы по теме