我花了很多时间寻找这样的错误,但没有找到任何东西, 如你所知Djangov2.00要求你用ForeignKey设置on_delete = ***,在这里我不能再做一个ForeignKey了。 我的Models.py
来自django.db导入模型
class makereport(models.Model):
Name = models.CharField(max_length=50)
VID = models.IntegerField()
Callsign = models.CharField(max_length=6)
Date = models.DateField(default='yy-mm-dd')
SelectAward = models.CharField(max_length=50, choices=(('1', 'Division Online Day'), ('2', 'Pilot Event'), ('3', 'ATC Event'), ('4', 'Pilot Event')))
done = models.ForeignKey('reports', on_delete=models.CASCADE)
# reports.ATC = reports.ATC + 1
def __str__(self):
return self.Name
class reports (models.Model):
Name = models.CharField(max_length=50)
VID = models.IntegerField()
DivisionOnline = models.IntegerField(default=0)
ATCEvent = models.IntegerField(default=0)
PilotEvent = models.IntegerField(default=0)
PilotSupport = models.IntegerField(default=0)
ATC = 0
def __str__(self):
return self.Name
和错误
django.db.utils.IntegrityError: Not Null constraint failed: report_makereport.done_id
我不知道如何处理该ID,V2之前的版本。 Views.py
from django.db import IntegrityError
from django.http import HttpResponse, request
from django.shortcuts import render, redirect
# Create your views here.
from django.views import View
from report import models
from report.forms import RepForm
from report.models import makereport, reports
class home(View):
def get(self,request):
form = RepForm()
reps = reports.objects.all()
rep = makereport.objects.all()
context = {
'rep':rep,
'form' : form,
'reps':reps
}
return render(request,'home.html',context)
def post(self,request):
form = RepForm(request.POST)
if form.is_valid():
repo = makereport()
repo.Name = form.cleaned_data['Name']
repo.VID = form.cleaned_data['VID']
repo.Callsign = form.cleaned_data['Callsign']
repo.Date = form.cleaned_data['Date']
repo.SelectAward = form.cleaned_data['SelectAward']
repo.done = None
try:
repo.save()
return redirect('/')
except IntegrityError:
context = {'form':form,
'error_msg': 'Error,Please Check your Information'}
return render(request, 'home.html', context)
else:
return self.get(request)
答案 0 :(得分:0)
您设置此字段done = models.ForeignKey('reports', on_delete=models.CASCADE)
的方式意味着此字段不能为空,也不能为空
当您创建makereport
对象时,此字段必须包含report
个实例,否则IntegrityError: Not Null
将会提升
如果在没有报表实例的情况下创建makereport
对象。以下可以做到
done = models.ForeignKey('reports',
on_delete=models.SET_NULL,null=True,blank=True)
在你的观点中,试试这个:
''' codes '''
repo.done = None
repo.save()