首页 > 解决方案 > 如何在表单管理员中添加十字以使用 django 添加对象

问题描述

这是我在 admin 中的自定义django表单:

class Rent_Form(forms.ModelForm):
    seller = forms.ModelChoiceField(queryset=Seller.objects.order_by('name'))
    norm = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,queryset=Norm.objects.order_by('name'),required=False)
    equipment = forms.ModelMultipleChoiceField(queryset=Equipment.objects.order_by('name'),required=False)
    pic = forms.ModelMultipleChoiceField(queryset=Pic.objects.order_by('name'),required=False)
    class Meta:
        model = Rent
        fields = '__all__'

但是在管理视图中,我没有看到绿色十字在我所有的海关表格附近添加一个对象。

如何添加绿色十字以在我的表单中添加对象?

问候

编辑 :

我试过这个:

import django.contrib.admin.widgets

class MyRelatedFieldWidgetWrapper(django.contrib.admin.widgets.RelatedFieldWidgetWrapper):
    """
    This class is a wrapper to a given widget to add the add icon for the
    admin interface.
    """
    def render(self, name, value, *args, **kwargs):
        rel_to = self.rel.to
        info = (rel_to._meta.app_label, rel_to._meta.model_name)
        self.widget.choices = self.choices
        output = [self.widget.render(name, value, *args, **kwargs)]
        if self.can_add_related:
            related_url = reverse(
                'admin:%s_%s_add' 
                % info, current_app=self.admin_site.name
            )
            output.append(
            """
            <a  href="%s"
                onclick="return showAddAnotherPopup(this);
                alt="%s">

                <i class="help icon-large icon-plus-sign"
                    id="add_id_%s"
                    data-original-title>
                </i>
            </a>""" % (related_url, _('Add Another'), name))
            return mark_safe(''.join(output))

# Monkeypatch it
django.contrib.admin.widgets.RelatedFieldWidgetWrapper = MyRelatedFieldWidgetWrapper

class Rent_Form(forms.ModelForm):
    seller = forms.ModelChoiceField(queryset=Seller.objects.order_by('name'))
    norm = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,queryset=Norm.objects.order_by('name'),required=False)
    equipment = forms.ModelMultipleChoiceField(queryset=Equipment.objects.order_by('name'),required=False)
    pic = forms.ModelMultipleChoiceField(queryset=Pic.objects.order_by('name'),required=False)
    class Meta:
        model = Rent
        fields = '__all__'
    def __init__(self, *args, **kwargs):
        super(Rent_Form, self).__init__(*args, **kwargs)
        self.fields['norm'].widget = django.contrib.admin.widgets.RelatedFieldWidgetWrapper()

但我有一个:

__init__() missing 3 required positional arguments: 'widget', 'rel', and 'admin_site'

错误

标签: pythondjango

解决方案


推荐阅读