【问题标题】:Can I create django model, which will be not persisted in database?我可以创建不会保存在数据库中的 django 模型吗?
【发布时间】:2014-05-06 14:04:51
【问题描述】:

如所问: 我可以创建 django 模型(models.Model),它不会保存在数据库中吗?

原因是我想在我的 django 管理员中使用它来构建基于 forms.ModelForm 的自定义表单

【问题讨论】:

    标签: django django-models django-forms django-admin


    【解决方案1】:

    您可以覆盖模型的save() 方法以防止保存到数据库,并使用managed = False 来防止Django 创建相应的表:

    class NonPersistantModel(models.Model):
        def save(self, *args, **kwargs):
            pass
    
        class Meta:
            managed = False
    

    请注意,当批量操作尝试保存此模型的实例时,这将引发错误,因为不会使用 save 方法并且该表将不存在。在您的用例中(如果您只想使用模型来构建ModelForm),这应该不是问题。

    但是,我强烈建议您将表单构建为 forms.Form 的子类。模型是您的数据库表的抽象,而普通表单可以执行生成的ModelForm 可以做的任何事情,等等。

    【讨论】:

    • 我无法判断这个建议是最佳实践还是可行。在极端情况下,如果我要使用带有信用卡信息的模型,这意味着它不能持久保存到数据库中,那么应该编写代码吗?非常感谢
    【解决方案2】:

    使用forms.Form 更容易:

    class UserForm(forms.Form):
        first_name = forms.CharField(max_length=100)
        last_name = forms.CharField(max_length=100)
        email = forms.EmailField()
    

    【讨论】:

    • 但是,如何在 django admin 中轻松绑定?
    • 这方面的指南不少,但并不容易。您基本上必须创建一个视图,向管理 url 添加一个 url 并扩展一个管理模板。
    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2011-07-10
    • 2021-02-18
    • 2017-12-27
    • 2016-01-05
    • 2023-04-10
    • 2010-10-05
    • 2018-12-19
    相关资源
    最近更新 更多