我有一些具有这样关系的模型:
class Item(model.Model):
name = models.CharField()
class Group(models.Model):
item = models.ManyToManyField(Item)
class Serie(models.Model):
name = models.CharField()
chart = models.ForeignKey(Chart)
group = models.ForeignKey(Group)
class Chart(models.Model):
name = models.CharField()
我需要动态创建一个图表对象,而不保存到数据库中。但我不能这样做,因为 Django 在分配关系时尝试使用对象主键。
我只想要
Group.add(Item())
无需将对象保存到数据库即可工作。有什么简单的方法可以解决这个问题吗?
最佳答案
为了 future 的读者,在这里恢复:
我通过定义一个表示类内部关系的私有(private)属性和一个用于检查对象是否可以从数据库中检索或驻留在内存中的属性来解决这个用例。
这是一个简单的例子:
class Parent(models.Model):
_children = []
name = models.CharField(max_length=100)
@property
def children(self):
if _children:
return self._children
else:
return self.children_set.all()
def set_virtual_children(self, value): # could use a setter for children
self._children = value # Expose _children to modification
def some_on_the_fly_operation(self):
print(','.join([c.name for c in self.children]))
class Children(models.Model):
parent = models.ForeignKey(Parent)
name = models.CharField(max_length=100)
这样,我可以设置“虚拟 child ”并“即时”使用所有定义的方法
关于Django:在内存中建立关系而不保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908349/