Django отправка данных в базу данных: не выполнено ограничение NOT NULL: sms_post.author_id - PullRequest
1 голос
/ 12 февраля 2020

Я новичок в django, я перенес свои модели, база данных работает нормально, я вижу данные, которые я добавил оболочкой manage.py. Но я не могу добавить данные из моего веб-приложения. Когда я писал текст на полях и нажимал кнопку отправки, он выдавал эту ошибку NOT NULL constraint failed: sms_post.author_id Спасибо за помощь ..

models.py files

from django.db import models
from django.contrib.auth.models import User

THE_GENDER = [
    ("Monsieur", "Monsieur"),
    ("Madame", "Madame")
]


class Post(models.Model):


    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
    gender = models.CharField(max_length=8, choices=THE_GENDER)
    number = models.CharField(max_length=100)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

forms.py files

from django import forms
from .models import Post
from crispy_forms.helper import FormHelper


class post_form(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(post_form, self).__init__(*args, **kwargs)

        self.helper = FormHelper(self)

    class Meta:
        model = Post
        fields = ["name", "email", "gender", "number"]

views.py files

from django.shortcuts import render
from django.http import HttpResponse
from .forms import post_form


from django.contrib.auth.decorators import login_required


@login_required
def home(request):
    form = post_form(request.POST or None)
    if form.is_valid():
        form.save()

    context = {
        "form": form
    }


    return render(request, "sms/home.html", context)


1 Ответ

1 голос
/ 12 февраля 2020

Вы не установили author в вашем экземпляре для объекта User. Вы можете сделать это с помощью:

from django.shortcuts import redirect

@login_required
def home(request):
    if request.method == 'POST':
        form = post_form(request.POST)
        if form.is_valid():
            <b>form.instance.author = request.user</b>
            form.save()
            return redirect(<i>'name-of-view'</i>)
    else:
        form = post_form()
    context = {
        'form': form
    }
    return render(request, 'sms/home.html', context)

Для реализации шаблона Post / Redirect / Get [wiki] , в случае успешного POST-запрос, вы должны сделать перенаправление, например, к тому же представлению. Таким образом, здесь вы можете заменить 'name-of-view' на имя вида для перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...