python - 在 Django 的 ManyToManyField 中缓存

标签 python django many-to-many manytomanyfield django-orm

我在 Django 中遇到一些缓存问题。到目前为止,我只在运行测试套件时看到过这个问题。问题是有时(似乎这种情况总是在第二次调用代码时发生),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>]

但是在第二次调用 auto_create 时,Django 认为有一个引用,但它没有给我:

0 []
1 []

这种行为当然会破坏更多的代码。知道这里可能出什么问题或至少如何调试它吗?

PS:这看起来像是对 Reference 类的排序导致的。但我仍然不清楚为什么。

最佳答案

我无法用 sqlite3 重现。难道是传入的Reference实例没有保存?以下运行没有打嗝:

def auto_create(instance):
    issue = Issue.objects.create(master = instance)
    print issue.references.count(), issue.references.all()
    assert issue.references.count()==0, "initial ref count is not null"
    assert len(issue.references.all())==0, "initial ref array is not empty"
    issue.references.add(instance)
    print issue.references.count(), issue.references.all()
    assert issue.references.count()==1, "ref count is not incremented"
    assert len(issue.references.all())==1, "initial ref array is not populated"


def test_auto():
    s = Source()
    s.save()
    r = Reference(source=s)
    r.save()
    auto_create(r)

关于python - 在 Django 的 ManyToManyField 中缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763455/

相关文章:

python - Networkx:如何为一次绘制多棵树指定多个根?

python - NLTK 中没有 pos_tag 的 ne_chunk

django - 我正在 django 中扩展用户模型,但由于原始密码而无法进行身份验证

html - 让 flymake 与 Django 一起工作?

mysql - 连接表上的索引是否用于多对多关系?

python - 调整存储在数组中的所有图像的大小

python - 在轴一(列)上移动时,dtypes 搞砸了

python - 如何在我的自定义小部件模板中包含内置的 django 小部件模板?

mysql - 从 MySQL 表中获取具有不同关系的对象的值 : several queries or one?

php - 拉拉维尔 4 : How to get data from a table in a many-to-many relationship with orderBy?