Django上的ForeignKey错误

时间:2018-05-06 20:03:43

标签: python django django-models

我花了很多时间寻找这样的错误,但没有找到任何东西, 如你所知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)

1 个答案:

答案 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()