Ошибка IntegrityError, NOT NULL - PullRequest
       28

Ошибка IntegrityError, NOT NULL

0 голосов
/ 11 июня 2019

Я хочу добавить теги к сообщениям в моем приложении Django.

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

Не удалось найти решение в существующих темах с той же ошибкой. Я бегал makemigrations и migrate.

С models.py:

class Post(models.Model):
    title = models.CharField(null=False, blank=False)
    text = models.TextField()

class Tag(models.Model): 
    post = models.ForeignKey('my_app.Post', on_delete=models.CASCADE, related_name='tags')
    tag_text = models.CharField()

Вид:

def post_add_tags(request, pk): 
    post= get_object_or_404(Post, pk=pk)
    if request.method == "POST": 
        form = TagForm(request.POST)
        if form.is_valid():
            tag = form.save()
            tag.post= post
            tag.save()
            return redirect("single_post_view", pk=post.pk)
    else: 
        form = TagForm()
    return render(request, "add_tags.html", {"form": form})

Форма от forms.py:

class TagForm(forms.ModelForm): 
    class Meta:
        model = Tag
        fields = ["tag_text"]

Шаблон:

<form method="POST"> {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="save btn btn-default">Add tags</button>
</form>

Ошибка:

IntegrityError в / post / 4 / add_tags /

Сбой ограничения NOT NULL: my_app_tag.post_id

Я использую Django версии 2.2, Python 3.6.8.

1 Ответ

0 голосов
/ 11 июня 2019

не save form, пока вы не установите все обязательные поля, особенно foreign keys:

def post_add_tags(request, pk): 
    post= get_object_or_404(Post, pk=pk)
    if request.method == "POST": 
        form = TagForm(request.POST)
        if form.is_valid():
            tag = form.save(commit=False)
            tag.post= post
            tag.save()
            return redirect("single_post_view", pk=post.pk)
    else: 
        form = TagForm()
    return render(request, "add_tags.html", {"form": form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...