Django表单集:使用相同的输入ID添加两行

2024-04-25 11:31:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用django实现动态表单集。它工作正常,只是在单击“添加”按钮时添加了两行ID相同的输入字段。应该只添加一行。你知道吗

你知道吗型号.py你知道吗

class StaffEmailCC(BaseModel):
    staff_email = models.ForeignKey("projects.StaffEmail",blank=True,null=True)
    cc_addresses=models.TextField(blank=True,null=True)
    class Meta:
        db_table = 'staffmailcc'
        verbose_name = _('staffmailcc')
        verbose_name_plural = _('staffmailcc')
        ordering = ('-date_added',)
    def __unicode__(self):
        return self.cc_addresses

你知道吗表单.py你知道吗

class StaffEmailCCForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(StaffEmailCCForm, self).__init__(*args, **kwargs)
    class Meta:
        model = StaffEmailCC
        fields = ['cc_addresses']
        widgets = {
            'cc_addresses': autocomplete_light.ChoiceWidget('StaffAutocomplete'),
        }

你知道吗视图.py你知道吗

def create_staff_mail(request):
    StaffEmailCCFormset = formset_factory(StaffEmailCCForm)
    staff_email_cc_formset = StaffEmailCCFormset(prefix='staff_email_cc_formset')
    form = StaffEmailForm()
    context = {
        "form": form,
        "staff_email_cc_formset":staff_email_cc_formset,
        "title": "Create Staff Mail",
        "sender_email":sender_email,
            }
    return render(request, 'projects/create_staff_mail.html', context)

HTML格式

<div class="content formElements add_item_container staff_email_cc_formset">
            <table>
                <tr>
                    <th>CC</th>
                </tr>
                {% for i in staff_email_cc_formset.forms %}
                <tr class="form_set_row">
                        <td>
                            <span class="left cc_addresses">
                                {{i.cc_addresses}}
                            </span>
                        </td>
                </tr>
                  {% endfor %}
             </table>
        {{ staff_email_cc_formset.management_form }}
    </div>

js公司

$('.staff_email_cc_formset table tr.form_set_row').formset({
                prefix: '{{ staff_email_cc_formset.prefix }}',
                formCssClass: 'dynamic-formset1'
            }); 

每次单击“添加”按钮时,都会添加两行,其中只有一行可以正确使用autocomplete。知道我做错了什么吗?你知道吗


Tags: pyselfformtrueemailaddressesdeftable
3条回答

可以将字段指定给窗体集

如果像这样编写formset,则需要额外的字段default 1:

staffeeMailCCFormSet=表格集\工厂(staffeeMailCCForm)

覆盖额外字段 StaffEmailCCFormset=formset\u工厂(StaffEmailCCForm,extra=1)

您可以看到表单集.py https://github.com/django/django/blob/master/django/forms/formsets.py

这可能看起来很奇怪。但是将js函数放在$(document.ready(function(){})中解决了我的问题

$(document).ready(function () {
        $('.staff_email_cc_formset table tr.form_set_row').formset({
            prefix: '{{ staff_email_cc_formset.prefix }}',
            formCssClass: 'dynamic-formset1'
        });
    });

Django表单集的默认值为extra=1。你知道吗

[...]The number of empty forms that is displayed is controlled by the extra parameter. By default, formset_factory() defines one extra form[...]

Documentation:在页面中搜索extra=,以快速找到您要查找的内容。你知道吗

StaffEmailCCFormset = formset_factory(StaffEmailCCForm, extra=0)

相关问题 更多 >