Django Creation View не сохраняет никаких данных

Мой вид создания перенаправляет на главную страницу блога хорошо после создания, но

я не могу найти ни одного созданного поста в сообщениях или на странице администратора, может кто-нибудь помочь пожалуйста

вот мое мнение

@login_required
def add_post(request):
    if request.method == 'POST':
        post_form = PostForm(request.POST, request.FILES, instance=request.user)
        snippet_form = SnippetForm(request.POST)
        if post_form.is_valid() and snippet_form.is_valid():
            post = post_form.save(commit=False)
            snpt = snippet_form.save(commit=False)
            post.creator = request.user
            snpt.id = post.id
            post.save() and snpt.save()
            return redirect('blog:index')
    else:
        post_form = PostForm()
        snippet_form = SnippetForm()
    return render(request, 'blog/add_post.html', {'post': post_form, 'snpt': snippet_form})

что не так в этом представлении, потому что я смог сохранить новый пост из админки добавить новый пост, но из клиента он ничего не сохраняет

Нужно ли здесь использовать метод model create() или что?

*Любой необходимый сниппет я предоставлю, но проблема в этом сниппете. Любая помощь будет очень признательна

enter image description here

enter image description here

enter image description here

post.save() and snpt.save()

должно быть:

post.save()
snpt.save()

Я подозреваю, что вы думали (используя ключевое слово and), что вы хотите обеспечить сохранение обеих моделей одновременно, но на самом деле вы просите Python сравнить результаты возврата двух функций, чтобы увидеть, являются ли они обе True; это нарушает ваш код (поскольку save() возвращает None, выполняется только ваша первая save(), поскольку Python даже не будет выполнять вторую, так как они никак не могут быть обе True, когда первая уже вернула Falsey).

Вы можете найти этот вопросполезным в вашем сценарии.

в случае, если кому-то интересно узнать

Первоначально Поскольку отношение между моделью Post и моделью Snippet является OneToOne, следующая строка

snpt.id = post.id

необходимо удалить нарушит ограничение уникальности pk, если вы измените отношение на внешний ключ, это добавит еще один экземпляр сниппета с другим pk

вы можете удалить его или назначить вместо него

post.snippet = snpt

Во-вторых Нет необходимости в commit=False в snpt_form, поскольку она уже является экземпляром post_form, и я не хотел менять ничего, кроме полей формы

Третий Либо положить

creator=request.user

вместо

instance=request.user

внутри post_form

или удалить его и оставить

post.creator = request.user

форт. Также, как упомянул @bigkeefer, но это уже вторично, возникает после решения основной проблемы короткое замыкание правила старшинства python приводит к тому, что эта строка не работает

post.save() and snpt.save()

instead put

post.save()

snpt.save()
Вернуться на верх