Django:在内存中建立关系而不保存到数据库

标签 django django-models

我有一些具有这样关系的模型:

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/

相关文章:

django sitemap.xml 文档与原始站点地图文档相矛盾

django - 定制登记表。确认密码

python - post_save 信号和关系

django - 在 Django 中渲染 {{ var }} 和 {{ var|safe }} 的区别

python - 以 Django 形式插入标题

django - Web 客户端和移动 REST api 安全性的推荐配置

django - 相同的字段,Django模型子类中的不同选择

django - 响应 Django 中的模型更改?

django.core.exceptions.AppRegistryNotReady : Apps aren't loaded yet with Django pytest

python - 如何在django中制作从10000开始的自动递增字段