唯一id表单字段django

唯一id表单字段django,django,django-forms,django-ckeditor,Django,Django Forms,Django Ckeditor,我有一个表单,我在模板中的嵌套for循环中调用它 这是forms.py class SubCategoryItemForm(forms.Form): paragraf = forms.CharField(widget=forms.TextInput(attrs={'class' : 'form-control'}), required=True, label="Paragraf") name = forms.CharField(widget=forms.TextInput(att

我有一个表单,我在模板中的嵌套for循环中调用它

这是forms.py

class SubCategoryItemForm(forms.Form):
    paragraf = forms.CharField(widget=forms.TextInput(attrs={'class' : 'form-control'}), required=True, label="Paragraf")
    name = forms.CharField(widget=forms.TextInput(attrs={'class' : 'form-control'}), required=True)
    description = forms.CharField(widget=CKEditorWidget(attrs={'class' : 'form-control'}), required=True)
views.py

def category_view(request, cat_id):
    category = Category.objects.get(id=cat_id)
    context = {"category": category, "sub_category_item_form": SubCategoryItemForm()}
    return render(request, 'registered/category.html', context=context)
在模板中(不含html):


我可以通过编辑js来抑制这一点,但是如果知道是否有任何方法可以动态设置字段id,那就太好了。

您应该使用一个formset,它可以为多个表单生成唯一的id

这里是Django表单集的文档

您应该使用一个表单集,该表单集将处理为多个表单生成唯一ID的操作

这里是Django表单集的文档 使用:

forms.py
中:

from django.forms import formset_factory

SubCategoryItemFormSet = formset_factory(SubCategoryItemForm)
def category_view(request, cat_id):
    category = Category.objects.get(id=cat_id)
    categories_formset = SubCategoryItemFormSet(initial=category.foreign_category.all().values())
    context = {"category": category, "categories_formset": categories_formset}
    return render(request, 'registered/category.html', context=context)
视图.py中

from django.forms import formset_factory

SubCategoryItemFormSet = formset_factory(SubCategoryItemForm)
def category_view(request, cat_id):
    category = Category.objects.get(id=cat_id)
    categories_formset = SubCategoryItemFormSet(initial=category.foreign_category.all().values())
    context = {"category": category, "categories_formset": categories_formset}
    return render(request, 'registered/category.html', context=context)
在模板中:

<form role="form" id="{{ category.id }}" action="{% url 'auth_sub_category_item_add' %}" method="POST">
    <table>
        {{ categories_formset }}
    </table>
 </form>

{{categories\u formset}}
请注意,在
视图中
需要处理完整的
表单集
,而不仅仅是一个子类别。Django负责映射表单中的每个元素

更好的是,您可以使用。

使用:

forms.py
中:

from django.forms import formset_factory

SubCategoryItemFormSet = formset_factory(SubCategoryItemForm)
def category_view(request, cat_id):
    category = Category.objects.get(id=cat_id)
    categories_formset = SubCategoryItemFormSet(initial=category.foreign_category.all().values())
    context = {"category": category, "categories_formset": categories_formset}
    return render(request, 'registered/category.html', context=context)
视图.py中

from django.forms import formset_factory

SubCategoryItemFormSet = formset_factory(SubCategoryItemForm)
def category_view(request, cat_id):
    category = Category.objects.get(id=cat_id)
    categories_formset = SubCategoryItemFormSet(initial=category.foreign_category.all().values())
    context = {"category": category, "categories_formset": categories_formset}
    return render(request, 'registered/category.html', context=context)
在模板中:

<form role="form" id="{{ category.id }}" action="{% url 'auth_sub_category_item_add' %}" method="POST">
    <table>
        {{ categories_formset }}
    </table>
 </form>

{{categories\u formset}}
请注意,在
视图中
需要处理完整的
表单集
,而不仅仅是一个子类别。Django负责映射表单中的每个元素


更好的是,您可以使用。

在这个实例中,您似乎并不需要使用唯一的ID。如果您没有收集用于每个表单字段的id,那么您只需在表单实例化中调用
auto\u id=False
,以确保没有字段添加自动id属性

例如:

def category_view(request, cat_id):
    # note auto_id=False
    form = SubCategoryItemForm(auto_id=False)

    category = Category.objects.get(id=cat_id)
    context = {"category": category, "sub_category_item_form": form}
    return render(request, 'registered/category.html', context=context)
Django文档对此进行了描述:


在这个实例中,您似乎并不需要使用唯一的ID。如果您没有收集用于每个表单字段的id,那么您只需在表单实例化中调用
auto\u id=False
,以确保没有字段添加自动id属性

例如:

def category_view(request, cat_id):
    # note auto_id=False
    form = SubCategoryItemForm(auto_id=False)

    category = Category.objects.get(id=cat_id)
    context = {"category": category, "sub_category_item_form": form}
    return render(request, 'registered/category.html', context=context)
Django文档对此进行了描述:


太棒了,我从你的例子中得到了分类。非常感谢,竖起大拇指!太棒了,我从你的例子中得到了分类。非常感谢,竖起大拇指!