Django之循环ModelForm判断字段是否为多对多或者一对多

# 获取自定制ModelForm
form_class = self.get_model_form()
# 获取当期的form对象
form = form_class()
# 遍历当前对象获取需要的值
from django.forms.models import ModelChoiceField
new_form = []
for form_part in form:
    temp = {'is_popup': False, 'item': form_part}
    """
    <django.forms.fields.CharField object at 0x000000425CDA1080>
    <django.forms.fields.CharField object at 0x000000425CDA10F0>
    <django.forms.fields.TypedChoiceField object at 0x000000425CDA1160>
    <django.forms.models.ModelMultipleChoiceField object at 0x000000425CDA11D0>
    <django.forms.models.ModelChoiceField object at 0x000000425CDA1240>
    """
    if isinstance(form_part.field, ModelChoiceField):
        """
        判断是否为多对多或者一对多"""
        related_model_name = form_part.field.queryset.model
        if related_model_name in site._registry:
            related_name = self.model._meta.get_field(form_part.name).remote_field.related_name
            info = self.model._meta.app_label, self.model._meta.model_name
            base_url = reverse('%s_%s_add' % info)
            popup_url = '%s?_popup=%s&model_name=%s&related_name=%s' % (
                base_url, form_part.auto_id, info[1], related_name)
            temp['is_popup'] = True
            temp['popup_url'] = popup_url
    new_form.append(temp)

return render(request, 'add_view.html', {'form': new_form})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值