0
ATTN_TYPE_CHOICES = (
('N', 'Entry'),
('X', 'Exit'),
('L', 'Leave'),
)
class Attn(Timestamp):
emp_id = models.CharField(
max_length=10
)
date = models.DateField()
time = models.TimeField(
default=time(00, 00)
)
type = models.CharField(
max_length=1,
choices=ATTN_TYPE_CHOICES,
default='N'
)
@property
def late(self):
return type == 'N' and self.time > LATE_LIMIT
def save(self, *args, **kwargs):
try:
Attn.objects.get(emp_id=self.emp_id, date=self.date, type='N')
except Attn.DoesNotExist:
pass
else:
try:
exit = Attn.objects.get(emp_id=self.emp_id, date=self.date, type='X')
except Attn.DoesNotExist:
self.type = 'X'
else:
exit.delete()
super(Attn, self).save(*args, **kwargs)
class Meta:
unique_together = ('emp_id', 'date', 'type')
我会创建对象三次。第一次很简单。该类型将是N
。第二次,我想要保存方法来检查类型N
是否已经存在,如果是,则将类型更改为“X”并保存第二个对象。第三次,我希望它检查N
,然后再检查X
。但是这一次它会找到X
,并且会在保存X
类型的新条目之前删除X
的现有条目。
由于某些原因,代码似乎卡在unique_together
,并且不让我保存管理面板中的数据。我是否应该尝试着解决Integrityerror
这个问题?尝试编辑保存这样的方法,
def save(self, *args, **kwargs):
try:
Attn.objects.get(emp_id=self.emp_id, date=self.date, type='N')
try:
exit = Attn.objects.get(emp_id=self.emp_id, date=self.date, type=='X')
exit.delete()
except Attn.DoesNotExist:
self.type = 'X'
else:
self.type = 'X'
except Attn.DoesNotExist:
self.type = 'N'
return super(Attn, self).save(*args, **kwargs)
取出unique_together约束,它不是现在需要
没有。同样的错误。看来由于'unique_together',django admin阻止我保存另一个类型为'N'的条目。 – MiniGunnR
删除unique_together约束,现在不需要它,你显式重写save方法并限制应用程序使用上面的条件保存对象...删除约束,它应该工作.. – zaidfazil
你能解释为什么我不能保留它?为什么在保存方法完成之前触发? – MiniGunnR