【问题标题】:How to Edit Data in Django dropdown HTML form?如何在 Django 下拉 HTML 表单中编辑数据?
【发布时间】:2021-08-27 03:37:17
【问题描述】:

我有一个表单,我正在编辑单个潜在客户数据,我使用 Django 默认管理面板提交数据。但现在我正在我的默认表单上编辑数据。 所以我担心的是,如果我编辑任何潜在客户,那么应该在数据库中可用的下拉列表中选择默认值,如果我想更改下拉列表值,那么我可以从下拉列表中选择它。

这是我的Models.py 文件

class Leads(models.Model):
   SOURCE = (
    ('Facebook', 'Facebook'),
    ('Website', 'Website'),
    ('PPC', 'PPC'),
    ('Reference', 'Reference'),
    ('Other Source', 'Other Source')
)
    
name = models.CharField(max_length=50, default=None)
email = models.EmailField(max_length=50, null=True, blank=True)
phone = models.CharField(max_length=10, default=None)
source = models.CharField(choices=SOURCE, default=2, max_length=100)

这是我的urls.py 文件

path(r'^leads/<int:id>/change',views.leads_edit, name="leads_edit"),

这是我的views.py 文件...

def leads_edit(request, id):
    leads = Leads.objects.get(id=id)
    context = {'leads':leads}
    template_name = 'file/edit.html'
    return render(request, template_name, context)

这是我的edit.html 文件,我正在尝试使用下拉字段进行编辑...

{% for obj in leads.SOURCE %}
    <option value="{{ leads.source }}">{{ obj}}</option>
{% endfor %}

请检查我的代码,让我知道如何显示数据库中选定的字段,以及如何在下拉列表中显示其余的其他字段。因为我可以更改下拉字段。

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    我不确定,但很确定您可能正在寻找类似的东西。

    SOURCE = (
        ('', '--------'),
        ('Facebook', 'Facebook'),
        ('Website', 'Website'),
        ('PPC', 'PPC'),
        ('Reference', 'Reference'),
        ('Other Source', 'Other Source')
    )
    
    source = models.CharField(choices=SOURCE, default='Website', max_length=100)
    

    并且默认为空将是

    source = models.CharField(choices=SOURCE, default='', max_length=100)
    

    您在哪里写了 default = 2,我认为这不会起作用,因为您的选择列表中的值是一个字符串。如果您改为这样编写它们,那么您可能会默认为数值,即使仍将其保留为字符域。如果您想走这条路,您也可以转换为其他 PositiveInteger 字段。第二个参数只是您选择的标签。

    SOURCE = (
        (0, '--------'),
        (1, 'Facebook'),
        (2, 'Website'),
        (3, 'PPC'),
        (4, 'Reference'),
        (5, 'Other Source')
    )
    

    而且,无论您的表单实际位于何处,除了上述内容之外,您可能还应该在该文件中执行类似的操作。如果需要,请选择其中一个。

    source = forms.CharField(
        widget = forms.Select(
            choices = SOURCE
        ),
        required = True/False,
        max_length = 100,
    )
    

    然后在您的表单类中,您可以尝试根据您需要执行的任何参数和检查来设置 __init__ 上的字段值。当您使用该类时,您必须将请求传递给表单类,或者只写这个 *def __init__(self, *args, **kwargs): ,这取决于您是否需要请求找到你的解决方案,看起来你可能会。传入请求看起来像这样 form = LeadsForm(request) 或 form = LeadsForm(request.POST) 如果你需要你的 id form = LeadsForm(请求,some_id)

    class LeadsForm(forms.Form):
        source = forms.CharField(
            widget = forms.Select(
                choices = SOURCE
            ),
            required = True/False,
            max_length = 100,
        )
    
        def __init__(self, request, some_id, *args, **kwargs):
            super(LeadsForm, self).__init__(*args, **kwargs)
    
            {{ your_lead_magic_here... }}
    
            self.fields['source'].initial = {{ your_calculated_lead_value_here }}
    

    【讨论】:

      【解决方案2】:

      请试试这个,希望对你有帮助...

      {% for id, obj in leads.SOURCE %}
           <option value="{{ id }}"{% if leads.source == id %} selected="selected"{% endif %}>{{ obj }}</option>
      {% endfor %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-26
        • 2013-12-11
        • 2018-02-10
        相关资源
        最近更新 更多