我的一个模型中有一个自定义保存例程,用于比较datetime
个字段,然后应该修改另一个模型上的字段并根据结果保存。但是,这种比较并没有像我期望的那样有效。也就是说,无论实际比较如何,我的<=
比较都会返回True
。
models.py
class Session(models.Model):
date = models.DateField()
# etc...
class Case(models.Model):
summary = models.TextField(blank=True)
session = models.ForeignKey(Session, on_delete=models.CASCADE, related_name='cases')
case_type = models.ForeignKey(CaseType)
# etc...
class Person(models.Model):
earliest_case = models.ForeignKey('Case', null=True, blank=True, related_name='person_to_earliest_case+')
latest_case = models.ForeignKey('Case', null=True, blank=True, related_name='person_to_latest_case+')
# etc...
class Litigant(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name='person_to_case')
case = models.ForeignKey(Case, on_delete=models.CASCADE, related_name='case_to_person')
# etc...
def save(self, *args, **kwargs):
try:
person = Person.objects.get(id=self.person_id)
earliest_case = person.earliest_case
latest_case = person.latest_case
if self.case.session.date <= earliest_case.session.date:
person.earliest_case = self.case
person.save()
elif self.case.session.date >= latest_case.session.date:
person.earliest_case = self.case
person.save()
except:
pass
super(Litigant, self).save(*args, **kwargs)
正如您所看到的,当我保存新的Litigant
时,我想要它要做的就是调用现有的Person
实例,比较该实例的earliest_case
条目{1}}和latest_case
新Case
个实例绑定到Litigant
,然后根据需要重新分配字段。
相反的是,新的case
被添加到person.earliest_case
,无论是否早于或晚于现有日期,我就是不太确定为什么。
供参考,Session
日期字段中存储的日期均为Year-Date-Month
。
令人沮丧的是,如果我在shell中调用了case.session.date
的两个实例,那么它们就比较好了。
如果重要的话,case
fk会被添加到我的视图中,如下所示:
views.py
def add_litigant(request, pk):
case_instance = get_object_or_404(models.Case, pk=pk)
if request.method == "POST":
form = forms.LitigantForm(request.POST)
if form.is_valid():
new_litigant = form.save(commit=False)
new_litigant.case = case_instance
new_litigant.save()
# etc...
# def edit_litigant works the same way
我将不胜感激任何指导或指示。提前谢谢!
答案 0 :(得分:2)
相反的是,新案例被添加到person.earliest_case,无论它是早于还是晚于现有日期,我都不确定原因。
这就是原因:
if self.case.session.date <= earliest_case.session.date:
person.earliest_case = self.case # <- assigned to earliest_case
person.save()
elif self.case.session.date >= latest_case.session.date:
person.earliest_case = self.case # <- assigned to earliest_case. COPYPASTA!
person.save()