Как добавить крест в форме администратора, чтобы добавить объект с помощью django

#python #django

#python #django

Вопрос:

Это моя пользовательская форма django в admin :

 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'
  

Ошибка

Комментарии:

1. Вам нужно обернуть виджеты в admin.widgets.RelatedFieldWidgetWrapper .

2. @DanielRoseman Как это сделать? Я что-то пробовал, но, похоже, не работает.

3. Я не совсем понимаю, что вы здесь делаете. Почему вы исправляете существующий класс admin?

4. Я пытаюсь добавить крест с помощью сопоставления с обезьяной

5. Но почему? Этот класс уже добавляет крест, в этом суть. Вам просто нужно обернуть ваши собственные виджеты этим классом.