【发布时间】:2013-03-13 15:35:22
【问题描述】:
我有一个 django 1.5 项目,它使用 django 模型而不是在 apache 服务器上运行的 mysql。
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
birthdate = models.DateField()
class Book(models.Model):
name = models.CharField(max_length=100)
author = models.ForeignKey(Person)
我还有一个 python/django 应用程序(使用 django 自定义命令)在必须使用这些模型的远程计算机上运行。
- 远程应用程序与服务器共享相同的模型定义
- 远程应用程序需要对模型进行只读访问
- 远程应用程序不能完整转储服务器数据库,因为服务器必须根据用户权限返回查询集
- 远程应用程序只能通过 http 连接到服务器
- 服务器可以通过 REST API (json) 公开模型
是否有任何自动方式通过 http 传输模型?我曾尝试使用 django.core.serializers 但遇到以下问题:
- 我无法序列化查询集中的相关对象
- 没有本地数据库,远程应用程序无法工作
- 远程应用程序在反序列化后搜索本地数据库上的相关对象(不存在)
编辑:
我设法像这样序列化模型:
books = Book.objects.prefetch_related('author').all()
authors = [book.author for book in books]
data = authors + list(books.all())
serialized_data = django.core.serializers.serialize("json", data)
我的问题是远程应用程序在没有本地数据库的情况下无法反序列化。
【问题讨论】:
-
为什么需要没有数据库的模型?这没有任何意义。只需创建 REST API,以便服务器将对远程应用程序进行查询。为什么不能只将文件复制到远程应用程序?听说过存储库吗?
-
远程计算机是否知道模型的结构?如果是这样,您可以序列化模型中的 *fields 等并传递它们。
-
远程应用知道模型结构
标签: python django django-models