python - Django使用非数据库字段创建客户管理视图
问题描述
我想创建一个客户管理视图,其中包含我手动填写的数据字段,这意味着后面没有数据库表。admin.py
到目前为止,我有这个
class TestAdmin(admin.ModelAdmin):
pass
admin.site.register(Test, TestAdmin)
在models.py中
class Test(models.Model):
test = models.BooleanField(
default=True
)
但是有了这个我收到一个错误
django.db.utils.ProgrammingError: relation "..._test" does not exist
Django 正在数据库中查找表,但在我的模型中,我只需要手动填写数据的字段
解决方案
django 的 ORM 的工作方式是,作为实例的模型类的所有类成员都model.Field
将映射到数据库中的列。
可能具有不映射到数据库表的模型属性。例如,您可以使用 a@property
代替。
class Test(models.Model):
@property
def test(self):
return get_aws_bucket_value(self.id)
@test.setter
def test(self, value):
set_aws_bucket_value(self.id, value)
您必须自己实现 aws getter/setter 函数。
您可以将属性用作 django 管理类中的只读字段。如果您的 getter 逻辑需要从远程服务器同步获取数据,请小心在列表视图中使用它,因为这将是一个重要的性能瓶颈。
如果您希望能够从 django 管理员为 setter 设置值,则必须为 TestAdmin 编写自定义ModelForm。
在这里可以让 Django 做你想做的事。但是 Django 的模型和管理是基于 ORM 的,这意味着使用关系数据库作为持久存储。如果你不想这样,你会发现自己更频繁地对抗和覆盖框架,而不是从 Django 的“包含电池”中受益。使用 Flask 而不是 Django 等不那么单一和不那么固执己见的框架可能会更好地解决这个项目。
推荐阅读
- sql - 使用 Soundex 创建一个函数以获取类似的发音词
- python - 如何在 BeautifulSoup 中删除以前的兄弟姐妹
- c# - 如何在 Ninject 的继承树中使用继承的 DbContext 的相同实例?
- spring - 为什么当restTemplate存在两个@Bean方法时Spring Boot应用程序启动
- c# - C# WinForms 基础用户控件
- python - 推断哪些列是日期时间
- django - Django:从 Pandas 到 Django Rest 框架的模型查询集
- java - 如何使用 java sdk 和 web-flux 将 multipart/form-data 上传到 AmazonS3?
- php - PHP array_filter 奇怪的行为
- javascript - 结果,节点 Cheerio 什么也没显示