【问题标题】:Is partial form a good practice in Django?部分形式在 Django 中是一种好的做法吗?
【发布时间】:2021-11-10 00:19:33
【问题描述】:

我是 Django 新手,我试图了解保存部分表单是否是一种好习惯。例如,我有四个字段的 Poll App 和 Candidate 模型:namesurnametargetsbiography。我有一个表格,我必须填写所有这些字段。但是如果用户只完成了填写namesurnametargets,但甚至没有开始填写biography字段,我怎样才能将他的草稿保存给用户可以稍后完成并且不会造成任何安全混乱?

models.py:

class Candidate(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    biography = models.TextField()
    targets = models.CharField(max_length=1000)

forms.py

class CandidateForm(ModelForm):
    class Meta:
        model = Candidate

        fields = [
            'name',
            'surname',
            'biography',
            'targets',
        ]

        widgets = {
            'biography': forms.Textarea(attrs={'rows': 3})
        }

我很高兴看到所有想法。

【问题讨论】:

  • 请在池应用程序中提供您的 models.py 文件。我说你的细节。
  • 完成。也许它会有用,所以我还添加了一个 forms.py 文件

标签: django


【解决方案1】:

我怎样才能将他的草稿保存给用户可以稍后完成而不是制作 有什么安全问题吗?

如果您将模型设计为接受空值或空白值,则可以将数据保存到 DB,或者您可以使用 Django 会话临时存储表单数据,直到表单完成...

在这两种情况下,安全性都不是问题,因为就像数据库访问一样,django 会话数据也存储在数据库中而不是浏览器中......因此最终用户不能轻易弄乱数据......

check the following answer if you would like to know more...

【讨论】:

    【解决方案2】:

    你的问题在这里:-

    models.py:

    class Candidate(models.Model):
        name = models.CharField(max_length=50)
        surname = models.CharField(max_length=50)
        biography = models.TextField()
        targets = models.CharField(max_length=1000)
    

    如果你把 default='your default value':-

    models.py:

    class Candidate(models.Model):
        name = models.CharField(max_length=50)
        surname = models.CharField(max_length=50)
        biography = models.TextField(default=' ')
        targets = models.CharField(max_length=1000)
    

    我认为这正是你所需要的

    【讨论】:

    • 这不是我找到的,因为它只是一个目标可能未填充的示例。实际上,它可能是传记、姓氏或其他领域。不过谢谢。非常感谢您的回答!
    • 对此感到抱歉。现在检查它....
    • 哦,我加入了。这也是一个不错的解决方案,因为您不必使用任何数据库,只需要使用“默认”属性。我想同时使用您的解决方案和 SANGEETH SUBRAMONIAM 的数据库解决方案是解决问题的好方法。谢谢!
    猜你喜欢
    • 2014-02-11
    • 2015-05-31
    • 2021-01-20
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多