Django создать пост

Я пытаюсь создать новое сообщение на форуме, и это работает, я также печатаю, если форма действительна, но когда я иду проверять после того, как сообщение не опубликовано. На странице администратора сообщение есть, оно одобрено, но отсутствуют поля тегов и категории. Они были добавлены при создании поста, если нет, то я получаю ошибку. Но мне приходится вручную добавлять их на странице администратора, чтобы сообщение было размещено на форуме.

Вот мой пост в моделях

class Post(models.Model):
    title = models.CharField(max_length=400)
    slug = models.SlugField(max_length=400, unique=True, blank=True)
    user = models.ForeignKey(Author, on_delete=models.CASCADE)
    content = HTMLField()
    categories = models.ManyToManyField(Category)
    date = models.DateTimeField(auto_now_add=True)
    approved = models.BooleanField(default=True)
    tags = TaggableManager()
    comments = models.ManyToManyField(Comment, blank=True)
    # closed = models.BooleanField(default=False)
    # state = models.CharField(max_length=40, default="zero")

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super(Post, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

Вот мой views.py

@login_required
def create_post(request):
    context = {}
    form = PostForm(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            print("\n\n form is valid")
            author = Author.objects.get(user=request.user)
            new_post = form.save(commit=False)
            new_post.user = author
            new_post.save()

            return redirect('forums')
        
    context.update({
            'form': form,
            'title': 'Create New Post'
    })
    return render(request, 'forums/create_post.html', context)

html очень простой, для проверки.

<form method="POST">
                            {% csrf_token %}    
                            {{form|crispy}}
                            <!-- Submit Post -->
                            <input type="submit" value="Save">
                        </form>

Пожалуйста, любая помощь будет очень признательна

Строка new_post = form.save(commit=False) не сохраняет отношения "многие ко многим" согласно docs. Обходной путь

new_post = form.save(commit=False)
new_post.user = author
new_post.save()
form.save_m2m()

Выдержка из docs

Другой побочный эффект использования commit=False проявляется, когда ваша модель имеет отношение отношение "многие-ко-многим" с другой моделью. Если ваша модель имеет многие-ко-многим и вы указываете commit=False при сохранении форму, Django не может немедленно сохранить данные формы для отношения "многие-ко-многим". Это происходит потому, что невозможно сохранить данные отношения "многие-ко-многим" для экземпляра, пока этот экземпляр не существует в базе данных.

Чтобы обойти эту проблему, каждый раз, когда вы сохраняете форму с использованием commit=False, Django добавляет метод save_m2m() в ваш ModelForm подкласса ModelForm. После того, как вы вручную сохранили экземпляр, созданный формы, вы можете вызвать save_m2m(), чтобы сохранить данные формы "многие ко многим".

.

Не думаю, что это решит все проблемы, но попробуйте.

попробуйте этот код :

obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
Вернуться на верх