Django保存覆盖投掷主要重复错误

Cra*_*aig 1 django datetime django-models

所以,我有一个名为ScheduleItem的模型

class ScheduleItem(models.Model):
      agreement = FK
      location = FK
      start = models.DateTimeField()
      end = models.DateTimeField()
      totalHours = DecimalField

      def get_total_hours(self):
            start = timedelta(hours=self.start.hour, minutes=self.start.minute)
            end = timedelta(hours=self.end.hour, minutes=self.end.minute)
            td = (end-start).seconds
            totalHours=Decimal(td/Decimal(60)/Decimal(60))
            return totalHours

     def save(self,*args,**kwargs):
          if self.pk == None:
              super(ScheduleItem,self).save(self,*args,**kwargs)
              self.refresh_from_db() # to access the datetime values, rather than unicode POST
              self.totalHours = self.get_total_hours()
          else:
              self.totalHours = self.get_total_hours()

          super(ScheduleItem,self).save(self,*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)

这会引发PRIMARY键错误.我得到第二个super(ScheduleItem,self)的重复条目.我不能为我的生活弄清楚如何检查pk以访问datetime值,然后再次保存在保存覆盖方法中.我尝试过移动的东西,我尝试在get_total_hours()函数中保存,只有麻烦.

我只想将对象提交给db,这样我就可以得到datetime对象,然后计算总小时数.

我宁愿不在保存功能中转换为日期时间.

有没有人有任何提示或有人能告诉我哪里出错了?

knb*_*nbk 5

你不应该self转到save().您正在调用super().save()实例上的绑定方法,因此self将作为第一个参数隐式传递.把它改成这个:

def save(self,*args,**kwargs):
    if self.pk is None:
        super(ScheduleItem,self).save(*args,**kwargs)
        self.refresh_from_db() # to access the datetime values, rather than unicode POST
        self.totalHours = self.get_total_hours()
    else:
        self.totalHours = self.get_total_hours()

    super(ScheduleItem,self).save(*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)

你得到这种奇怪的行为,因为第一个位置参数是force_insert,并且模型实例的计算结果为True.第二次调用super().save()试图强制插入与之前保存的相同的pk.