Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:如何为'key:value'对创建表单?_Django_Django Forms - Fatal编程技术网

Django:如何为'key:value'对创建表单?

Django:如何为'key:value'对创建表单?,django,django-forms,Django,Django Forms,我有一个模型标签,用于保存网站中出现的字符串: 类标签(models.Model): key=models.CharField(最大长度=32,主键=True) value=models.CharField(最大长度=128,空白=True,默认值=“”) 我想制作一个表单来定制这些字符串。看起来像这样: Site Configuration this_is_key: this_is_value_____________ site_title: ________________ site_su

我有一个模型
标签
,用于保存网站中出现的字符串:

类标签(models.Model):
key=models.CharField(最大长度=32,主键=True)
value=models.CharField(最大长度=128,空白=True,默认值=“”)
我想制作一个表单来定制这些字符串。看起来像这样:

Site Configuration
this_is_key: this_is_value_____________
site_title: ________________
site_subtitle: _________________
site_copyright_info: _________________
admin_email: _________________
admin_phone: _________________
[Save]
当任何键的值不存在时,
Label.create()


现在,如何使用
forms.Form
forms.ModelForm
(或其他任何东西…我不确定是否使用
formset
之类的东西来完成此任务)来完成此任务?我已经寻找解决方案好几天了。

您似乎无法使用表单。在不编写整个新库的情况下,表单可用于此目的。您要求在运行时创建表单模型,这在我看来是非常困难的


我的建议是,如果这是您想要采用的方法,只需编写您自己的自定义表单类。但是,请注意,要包含的任何验证或其他功能都必须与每个标签一起存储在数据库中。因此,如果您希望给定的标签最多有150个字符,则必须将其与键和值一起存储,以便您可以在运行时执行自己的验证,而不会出现这样的情况:您将无法使用forms.forms,而无需编写整个新库。您要求在运行时创建表单模型,这在我看来是非常困难的


我的建议是,如果这是您想要采用的方法,只需编写您自己的自定义表单类。但是,请注意,要包含的任何验证或其他功能都必须与每个标签一起存储在数据库中。因此,如果您希望给定的标签最多有150个字符,则必须将其与键和值一起存储,以便您可以在运行时执行自己的验证,而不会出现这样的情况:您将无法使用forms.forms,而无需编写整个新库。您要求在运行时创建表单模型,这在我看来是非常困难的


我的建议是,如果这是您想要采用的方法,只需编写您自己的自定义表单类。但是,请注意,要包含的任何验证或其他功能都必须与每个标签一起存储在数据库中。因此,如果您希望给定的标签最多有150个字符,则必须将其与键和值一起存储,以便您可以在运行时执行自己的验证,而不会出现这样的情况:您将无法使用forms.forms,而无需编写整个新库。您要求在运行时创建表单模型,这在我看来是非常困难的

我的建议是,如果这是您想要采用的方法,只需编写您自己的自定义表单类。但是,请注意,要包含的任何验证或其他功能都必须与每个标签一起存储在数据库中。因此,如果您希望给定的标签最多有150个字符,则必须将其与键和值一起存储,以便您可以在运行时执行自己的验证

settings.py
设置.py中定义标签:

标签=[
#('key'、'label in form'、'default value'),
('site_title','site title','Hello World!'),
(“版权信息”、“版权信息”、“约翰·史密斯(c)2015”),
(“管理员电子邮件”、“您的电子邮件”、“0212345678”),
]
models.py forms.py 我们定义了
save()
方法来保存
request.POST
到我们的模型中

from django import forms
from pages.models import Label
from django.conf import settings

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Div, Button, Fieldset, HTML

class LabelForm(forms.Form):    

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for key, label, default_value in settings.LABELS: # settings.LABELS
            self.fields[key] = forms.CharField(max_length=128)
            self.fields[key].label = label

            # get_or_create => (<Label: Label object>, False)
            labelObj, _ = Label.objects.get_or_create(
                key=key,
                defaults={'value': default_value})
            self.fields[key].initial = labelObj.value

        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'Submit'))

    def save(self, POST):
        for key, _, _ in settings.LABELS:
            Label.objects.filter(key=key).update(value=POST[key])
label\u settings.html
此页面用于编辑/保存我们的标签

<form method="post" action="">
  {% crispy form %}
</form>
模板中
{%load common_tags%}
{%label'站点\标题“%”
我的小解决方案

settings.py
设置.py中定义标签:

标签=[
#('key'、'label in form'、'default value'),
('site_title','site title','Hello World!'),
(“版权信息”、“版权信息”、“约翰·史密斯(c)2015”),
(“管理员电子邮件”、“您的电子邮件”、“0212345678”),
]
models.py forms.py 我们定义了
save()
方法来保存
request.POST
到我们的模型中

from django import forms
from pages.models import Label
from django.conf import settings

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Div, Button, Fieldset, HTML

class LabelForm(forms.Form):    

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for key, label, default_value in settings.LABELS: # settings.LABELS
            self.fields[key] = forms.CharField(max_length=128)
            self.fields[key].label = label

            # get_or_create => (<Label: Label object>, False)
            labelObj, _ = Label.objects.get_or_create(
                key=key,
                defaults={'value': default_value})
            self.fields[key].initial = labelObj.value

        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'Submit'))

    def save(self, POST):
        for key, _, _ in settings.LABELS:
            Label.objects.filter(key=key).update(value=POST[key])
label\u settings.html
此页面用于编辑/保存我们的标签

<form method="post" action="">
  {% crispy form %}
</form>
模板中
{%load common_tags%}
{%label'站点\标题“%”
我的小解决方案

settings.py
设置.py中定义标签:

标签=[
#('key'、'label in form'、'default value'),
('site_title','site title','Hello World!'),
(“版权信息”、“版权信息”、“约翰·史密斯(c)2015”),
(“管理员电子邮件”、“您的电子邮件”、“0212345678”),
]
models.py forms.py 我们定义了
save()
方法来保存
request.POST
到我们的模型中

from django import forms
from pages.models import Label
from django.conf import settings

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Div, Button, Fieldset, HTML

class LabelForm(forms.Form):    

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for key, label, default_value in settings.LABELS: # settings.LABELS
            self.fields[key] = forms.CharField(max_length=128)
            self.fields[key].label = label

            # get_or_create => (<Label: Label object>, False)
            labelObj, _ = Label.objects.get_or_create(
                key=key,
                defaults={'value': default_value})
            self.fields[key].initial = labelObj.value

        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'Submit'))

    def save(self, POST):
        for key, _, _ in settings.LABELS:
            Label.objects.filter(key=key).update(value=POST[key])
label\u settings.html
此页面用于编辑/保存我们的标签

<form method="post" action="">
  {% crispy form %}
</form>
模板中
{%load common_tags%}
{%label'站点\标题“%”
我的小解决方案

settings.py
设置.py中定义标签:

标签=[
#('key'、'label in form'、'default value'),
('site_title','site title','Hello World!'),
(“版权信息”、“版权信息”、“约翰·史密斯(c)2015”),
(“管理员电子邮件”、“您的电子邮件”、“0212345678”),
]
models.py forms.py 我们定义了
save()
方法来保存
request.POST
到我们的模型中

from django import forms
from pages.models import Label
from django.conf import settings

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Div, Button, Fieldset, HTML

class LabelForm(forms.Form):    

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for key, label, default_value in settings.LABELS: # settings.LABELS
            self.fields[key] = forms.CharField(max_length=128)
            self.fields[key].label = label

            # get_or_create => (<Label: Label object>, False)
            labelObj, _ = Label.objects.get_or_create(
                key=key,
                defaults={'value': default_value})
            self.fields[key].initial = labelObj.value

        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'Submit'))

    def save(self, POST):
        for key, _, _ in settings.LABELS:
            Label.objects.filter(key=key).update(value=POST[key])
label\u settings.html
此页面用于编辑/保存我们的标签

<form method="post" action="">
  {% crispy form %}
</form>
模板中
{%load common_tags%}
{%label'站点\标题“%”
什么是“我自己的自定义表单类”?能告诉我更多的细节吗?有什么问题吗