我想创建一个自定义管理视图,其中包含手动填充的数据字段,这意味着后面没有数据库表。
在我的admin.py
中,我到目前为止都有这个
class TestAdmin(admin.ModelAdmin):
pass
admin.site.register(Test, TestAdmin)
在模型.py在
^{pr2}$但是我收到了一个错误
django.db.utils.ProgrammingError: relation "..._test" does not exist
Django正在数据库中查找表,但在我的模型中,我只需要手动填充数据的字段
django的ORM的工作方式是,作为
model.Field
实例的模型类的所有类成员都将映射到数据库中的一个列。在可能会有不映射到数据库表的模型属性。例如,您可以使用
@property
。在您必须自己实现aws getter/setter函数。在
可以将属性用作django管理类中的只读字段。如果getter逻辑需要从远程服务器同步获取数据,请注意在列表视图中使用它,因为这将是一个严重的性能瓶颈。在
如果您希望能够从django管理员为setter设置值,则必须为TestAdmin编写一个自定义的ModelForm。在
在这里可以说服Django做你想做的事。但是Django的模型和管理是基于ORM的,这意味着使用关系数据库作为持久存储。如果您不想这样做,您会发现自己经常与框架抗争并覆盖框架,而不是从Django的“电池包括在内”中获益。用一个不那么单一和不那么固执己见的框架来解决这个项目,比如Flask而不是Django。在
似乎您并没有真正了解}是什么。
Model
和{Model
类是数据库表的表示,而ModelAdmin
是为该表及其内容提供管理功能的组件。如果没有一个模型,你就不可能有一个模型。在长话短说:你要么
1/使用模型或
2/自己编写整个视图和模板,并将其插入管理员。在
对于第二个解决方案,see this question (and it's answers),或者只在google上搜索“没有模型的django管理视图”(有两个第三方应用程序,应该可以帮助在管理中插入自定义视图)。在
现在,第一个解决方案可能——或者不是,取决于您的确切需求——和第二个一样好,这取决于谁填充您的s3bucket以及如何填充。如果没有模型,每次有人访问您的自定义管理视图时,您都必须在bucket中查询一个文件列表,这可能会非常昂贵。如果所有上传到s3 bucket的操作都在您的控制之下,那么您可以使用一个模型来保存一个本地文件列表“cache”,并且您只需要在有效下载一个文件时点击s3。这也为您提供了存储有关这些文件的元数据的机会—这些文件可用于搜索/筛选—并最终在需要时将您的s3文件链接到其他模型。当然,这意味着您可以免费获得管理员;)
实际上,即使您无法控制这些上传,出于上述原因,您可能仍然希望使用模型,并有一个后台任务(cron job或等效任务)从s3存储桶内容更新您的表(或者,如果s3提供web钩子,则在上传时有一个由s3调用的API端点来更新您的表)。在
相关问题 更多 >
编程相关推荐