django.db.utils.OperationalError:外键不匹配-“;进入“返回气缸”;引用;条目“气缸条目”;
即使在我清除了所有迁移之后,仍出现以下错误。在我稍后删除Cylinderentry模型的主键之前,一切都正常工作,但它仍然显示“django.db.utils.OperationalError:外键不匹配-“Entry_returncylinder”引用“Entry_Cylinderentry” 当我运行py manage.py makemigrations时,它会显示:django.db.utils.OperationalError:外键不匹配-“;进入“返回气缸”;引用;条目“气缸条目”;,django,Django,即使在我清除了所有迁移之后,仍出现以下错误。在我稍后删除Cylinderentry模型的主键之前,一切都正常工作,但它仍然显示“django.db.utils.OperationalError:外键不匹配-“Entry_returncylinder”引用“Entry_Cylinderentry” 当我运行py manage.py makemigrations时,它会显示: You are trying to add a non-nullable field 'id' to cylinderent
You are trying to add a non-nullable field 'id' to cylinderentry without a default; we can't do that (the database needs something to populate existing rows).splays following :
django.db.utils.OperationalError: foreign key mismatch - "Entry_returncylinder" referencing "Entry_cylinderentry"
或者,当我运行py manage.py migrate时,它会显示:
You are trying to add a non-nullable field 'id' to cylinderentry without a default; we can't do that (the database needs something to populate existing rows).splays following :
django.db.utils.OperationalError: foreign key mismatch - "Entry_returncylinder" referencing "Entry_cylinderentry"
以下是所有型号:
from django.db import models
from django.utils import timezone
from django.urls import reverse
# Create your models here.
class CylinderEntry(models.Model):
stachoice=[
('Fill','fill'),
('Empty','empty')
]
substachoice=[
('Available','availabe'),
]
cylinderId=models.CharField(max_length=50,unique=True)
gasName=models.CharField(max_length=200)
cylinderSize=models.CharField(max_length=30)
Status=models.CharField(max_length=40,choices=stachoice,default='fill')
Availability=models.CharField(max_length=40,choices=substachoice,default="available")
EntryDate=models.DateTimeField(default=timezone.now)
def get_absolute_url(self):
return reverse('cylinderDetail',args=[(self.id)])
def __str__(self):
return self.cylinderId
class IssueCylinder(models.Model):
cylinder=models.OneToOneField('CylinderEntry',on_delete=models.CASCADE)
userName=models.CharField(max_length=60)
issueDate=models.DateTimeField(default=timezone.now)
def save(self,*args,**kwargs):
if not self.pk:
CylinderEntry.objects.filter(cylinderId=self.cylinder.cylinderId).update(Availability=('issued'))
super().save(*args,**kwargs)
def __str__(self):
return self.userName
class ReturnCylinder(models.Model):
rechoice=[
('fill','Fill'),
('empty','Empty')
]
reav=[
('Yes','yes'),
('No','no')
]
cylinder=models.ForeignKey('CylinderEntry',on_delete=models.CASCADE)
user=models.ForeignKey('IssueCylinder',on_delete=models.CASCADE)
status=models.CharField(max_length=20,choices=rechoice)
returnDate=models.DateTimeField(default=timezone.now)
Availability=models.CharField(max_length=5,choices=reav)
def save(self,*args,**kwargs):
if not self.pk:
IssueCylinder.objects.get(userName=self.user.userName).delete()
if self.status=='yes' or self.status=='Yes':
CylinderEntry.objects.get(cylinderId=self.cylinder.cylinderId).update(Availability=('available'))
else:
CylinderEntry.objects.get(cylinderId=self.cylinder.cylinderId).delete()
super().save(*args,**kwargs)
def __str__(self):
return self.cylinder
我不知道我在哪里失踪。救命 查看这篇文章,我认为它可能会有所帮助。感谢您的建议,但它不起作用。正如我在问题中提到的,我曾尝试将主键放在CylinderEntry模型上,后来我将其删除,这就是发生此错误的原因。为了解决这个问题,我只清除了所有旧的迁移(在上一个案例中我没有执行),然后再次运行所有迁移。