python - 在for循环中更改django表单的ID

标签 python html django django-templates

我被困在我的代码中了。需要帮助。

这是我的前端。我正在渲染存储在“form_list”中的表单。 问题是存储的表单具有相同的类型,因此产生具有相同“id”和相同“name”的输入字段。

这是我的观点:-

@login_required
def VideoLinkView(request):
    """view to save the video links """
    current_form_list = []
    current_form = None
    if request.method == 'GET':
        vl = VideoLink.objects.filter(company=CompanyModel.objects.get(owner=request.user))
        for link in vl:
            current_form = VideoLinkForm(link.__dict__)
            current_form_list.append(current_form)
        return render(request, "premium/video_link.html", context={'form_list':current_form_list})

这是我的 html 模板:-

{% for form in form_list %}
    <div class="form-group">
        <label for="id_video_link">Video Link:</label>
        {{ form.video_link }}
    </div>
{% endfor %}

如何在 for 循环输入标记的每次迭代中自动创建不同的“id”和不同的“名称”,而不需要知道 form_list 中没有存储任何表单。 我尝试了 {{ forloop.counter}} 但没有成功,也许我犯了一些错误。另外,原始 python 不能在模板中工作。

提前致谢。

最佳答案

您创建表单的方式有两个错误。首先,第一个位置参数是用户提交的值;传递此参数会触发验证等。如果您要传递显示值以预填充表单,则必须使用 initial kwarg:

current_form = VideoLinkForm(initial={...dict_of_values...})

但是,即使这样对于您的用例来说也是不正确的。 link 是一个模型实例;你应该使用实例 kwarg:

current_form = VideoLinkForm(instance=link)

现在,要解决您提出的问题,您只需传递一个前缀,就像我最初建议的那样:

for i, link in enumerate(vl):
    current_form = VideoLinkForm(instance=link, prefix="link{}".format(i))

但是,现在您已经显示了所有详细信息,我们可以看到这不是最好的方法。你有一个查询集;所以你应该简单地使用 model formset .

from django.forms import modelformset_factory
VideoLinkFormSet = modelformset_factory(VideoLink, form=VideoLinkForm, queryset=vl)
current_form_list = VideoLinkFormSet()

关于python - 在for循环中更改django表单的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41073028/

相关文章:

javascript - Jquery无法选择表单内的输入元素,但在表单外时选择

python - 在 Django loaddata 中,它会抛出 json 格式的错误,但对于 yaml 格式却可以正常工作,为什么?

django - 最佳实践 - Django 多站点

python - 在 matplotlib 中向图中追加一条线,轴故障

python - python 中 3D 可视化的现代方法 : discuss mayavi

jquery - 动态 DOM 元素上的 webKit 转换

python-3.x - 抽象父模型中的 models.E006 - Django 3.1

python - Pandas 如何在没有聚合的情况下创建简单的交叉表?

python - 用 pandas 进行行之间的减法

html - 文本没有出现在 float 图像旁边