我在 Django 中遇到了一些缓存问题。到目前为止,我仅在运行 testsuite 时才看到此问题。问题是有时(这似乎总是在第二次调用代码时发生),Django 不会更新它的缓存或者它变得不一致。
经过一些调试的提取代码是:
class Source(models.Model):
name = models.CharField(max_length = 50)
quality = models.IntegerField(default = 0)
class Reference(models.Model):
url = models.URLField()
source = models.ForeignKey(Source)
class Meta:
ordering = ['-source__quality']
class Issue(models.Model):
references = models.ManyToManyField(Reference)
master = models.ForeignKey(Reference, related_name = 'mastered_issue_set')
def auto_create(instance):
issue = Issue.objects.create(master = instance)
print issue.references.count(), issue.references.all()
issue.references.add(instance)
print issue.references.count(), issue.references.all()
在第一次调用时,我正确地得到以下输出:
0 []
1 [<Reference: test>]
然而,在第二次调用 to 时auto_create
,Django 认为有一个参考,但它没有给我:
0 []
1 []
这种行为当然会破坏进一步的代码。知道这里可能出了什么问题,或者至少如何调试它?
PS:看起来Reference
上课订购是造成这种情况的原因。但我仍然不清楚为什么。