簡體   English   中英

NOT NULL 約束失敗:

[英]NOT NULL constraint failed:

我正在創建一個網站,在管理員設置的主題下的人們將能夠進行輸入。 每條記錄都鏈接到一個用戶帳戶,但是在創建新記錄時出現錯誤 - NOT NULL 約束失敗:menu_description.topic_id 在此處輸入圖像描述

menu/views.py

from django.shortcuts import render, redirect
from .models import Topic, Description
from .forms import DescriptionForm
from django.contrib.auth.decorators import login_required



def index(request):
    topic = Topic.objects.all
    context = {'topic': topic}
    return render(request, 'Menu/Menu.html', context)


@login_required
def description(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    description = topic.description_set.filter(owner=request.user).order_by('date_added')
    context = {'description': description, 'topic': topic}
    return render(request, 'Menu/Description.html', context)


@login_required
def new_description(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    if request.method != 'POST':
        form = DescriptionForm()
    else:
        form = DescriptionForm(data=request.POST)
        if form.is_valid():
            new_description = form.save(commit=False)
            new_description.owner = request.user
            new_description.save()
            return redirect('description', topic_id=topic_id)
    context = {'topic': topic, 'form': form}
    return render(request, 'Menu/new_description.html', context)


@login_required
def edit_description(request, entry_id):
    description = Description.objects.get(id=entry_id)
    topic = description.topic
    if request.method != 'POST':
        form = DescriptionForm(instance=description)
    else:
        form = DescriptionForm(instance=description, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('description', topic_id=topic.id)
    context = {'description': description, 'topic': topic, 'form': form}
    return render(request, 'Menu/Edit_description.html', context)


@login_required
def delete_description(request, description_id):
    description = Description.objects.get(id=description_id)
    topic = description.topic
    description.delete()
    return redirect('description', topic_id=topic.id)

我的代碼 fsdfsfdsfsfas sdfsadklnfajsnflksanfgiljsglidsehseoigusdhoigusdfhoigsdhoigudsfhgoidsfhgokjfdshdsoiughsodfighosidhgosidfghsdoiughdfoigushdfiogsfdhikg

menu/models.py

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


class Topic(models.Model):
    text = models.CharField(max_length=100)

    def __str__(self):
        return self.text


class Description(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        verbose_name_plural = 'Descriptions'

    def __str__(self):
        if len(self.text) > 100:
            return f'{self.text[:100]}...'
        else:
            return self.text

您收到此錯誤的原因是您沒有將任何主題與新創建的Description相關聯。 試一試吧

        # ...
        form = DescriptionForm(data=request.POST)
        if form.is_valid():
            new_description = form.save(commit=False)
            new_description.owner = request.user
            new_description.topic = topic  # new
            new_description.save()
            # ....

在您的代碼中,請在def edit_description中設置new_description.topic ,因此:

@login_required
def new_description(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    if request.method != 'POST':
        form = DescriptionForm()
    else:
        form = DescriptionForm(data=request.POST)
        if form.is_valid():

            # >>>> SET TOPIC HERE <<<<<<<
            new_description.topic = topic

            new_description = form.save(commit=False)
            new_description.topic = topic
            new_description.owner = request.user
            new_description.save()

            return redirect('description', topic_id=topic_id)
    context = {'topic': topic, 'form': form}
    return render(request, 'Menu/new_description.html', context)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM