【发布时间】:2011-08-22 06:30:03
【问题描述】:
我有几个相关的模型,看起来有点像这样:
class Book(models.Model):
title = models.TextField()
class Author(models.Model):
"""
>>> b = Book(title='some title')
>>> b.save()
>>> a = Author(name='some name')
>>> a.save()
>>> a.books.add(b)
>>> b in a.books.all()
True
"""
name = models.TextField()
books = models.ManyToManyField(Book)
此版本是我的生产应用程序的简化版本,但生产中的相同测试失败 - a.books.all() 返回空列表,即使在我执行 a.books.add(b) 之后也是如此。
我查看了数据库(sqlite),并且肯定在连接表 book_author 中创建了一个新条目。我还尝试调用 transaction.commit() 和 connection.close() 来尝试刷新数据库的视图。没有喜悦。任何关于什么样的事情可能导致生产中的奇怪行为的指针都将不胜感激。
我的一个想法是它与第三个相关模型有关,为此我手动指定了一个直通表,如下所示:
class Genre(models.Model):
desc = models.TextField()
books = models.ManyToManyField(Book, through='BookGenres')
class BookGenres(models.Model):
book = models.ForeignKey(Book)
genre = models.ForeignKey(Genre)
但是,将它添加到测试应用程序并不会破坏事情......我还应该寻找什么?
[edit 11/5] 更奇怪的行为,听从 Daniel the cmets 的建议(感谢您的尝试!:-)
更奇怪的行为:
>>>a.books.all()
[]
>>>a.books.filter(pk=b.id)
[]
>>>a.books.filter(pk=b.id).count()
1
>>>len(a.books.filter(pk=b.id))
0
正如我所说,我的“真实”模型更复杂,我无法在简化测试中复制这种行为,但我们将不胜感激任何关于查看内容的想法。
【问题讨论】:
标签: django sqlite django-models transactions many-to-many