如何解决Django模型中的Signal
我问你这个问题,我找不到解决方法。我正在Django Admin中输入记录,因此我在模型中输入了函数。 在我的Sample类中,我添加了几个字段,但我遇到的一个问题是“数字”字段(样本编号)。每次我添加一个新样本时,都会在最后一个数字上加1,如果年份改变了,则返回零。所以我有用于示例类的代码:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.utils import timezone
class Sample(models.Model):
PREST = (
('APS','APS'),('Convenio','Convenio'),('Arancelado','Arancelado'),)
DPTO = (
('LAB','LAB'),('DB','DB'),('DSB','DSB'),('DSO','DSO'),)
dpto = models.CharField(max_length=45,choices=DPTO)
number = models.PositiveIntegerField()
matrix = models.ForeignKey('Matrix',models.DO_NOTHING)
kindsample = models.ForeignKey('Kindsample',models.DO_NOTHING)
sample = models.CharField(max_length=255)
identification = models.CharField(max_length=255,blank=True,null=True)
date = models.DateField(blank=True)
city = models.ForeignKey('City',models.DO_NOTHING)
address = models.CharField(max_length=255,null=True)
assays = models.ManyToManyField('Assay')
def __str__(self):
return f"{self.number} - {self.sample}"
信号功能是这样的:
def save_add(sender,instance,**kwargs):
if Sample.objects.all().exists():
now = timezone.now()
year_sample = Sample.objects.all().last().date.year
last = Sample.objects.all().last().number
if year_sample == now.year:
next = last + 1
else:
next = 1
else:
next = 1
number = next
number.save()
post_save.connect(save_add,sender=Sample)
但这会引发以下错误:
django.db.utils.IntegrityError:关系“ lab_sample”的列“ number”中的空值违反了非空约束
我非常感谢您提供解决方案,非常感谢您。
解决方法
您只能保存存在的模型或列,因此可以尝试以下操作:
last = next
last.save()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。