示例#1
0
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        db = kwargs.get('using')

        if db_field.name in self.get_autocomplete_fields(request):
            kwargs['widget'] = AutocompleteSelect(db_field.remote_field,
                                                  self.admin_site,
                                                  using=db)
        elif db_field.name in self.raw_id_fields:
            kwargs['widget'] = widgets.ForeignKeyRawIdWidget(
                db_field.remote_field, self.admin_site, using=db)
        elif db_field.name in self.radio_fields:
            kwargs['widget'] = widgets.AdminRadioSelect(
                attrs={
                    'class': get_ul_class(self.radio_fields[db_field.name]),
                })
            kwargs['empty_label'] = gettext('None') if db_field.blank else None

        if db_field.name == 'image':
            kwargs['widget'] = widgets.ForeignKeyRawIdWidget(
                db_field.remote_field, self.admin_site, using=db)

        if 'queryset' not in kwargs:
            queryset = self.get_field_queryset(db, db_field, request)
            if queryset is not None:
                kwargs['queryset'] = queryset
        return super(PlaceArticleInline,
                     self).formfield_for_foreignkey(db_field, request,
                                                    **kwargs)
示例#2
0
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        """
        Get a form Field for a ForeignKey.
        """
        db = kwargs.get('using')

        if db_field.name in self.get_autocomplete_fields(request):
            kwargs['widget'] = AutocompleteSelect(db_field.remote_field,
                                                  self.admin_site,
                                                  using=db)
        elif db_field.name in self.raw_id_fields:
            kwargs['widget'] = FixedForeignKeyRawIdWidget(
                db_field.remote_field, self.admin_site, using=db)
        elif db_field.name in self.radio_fields:
            kwargs['widget'] = widgets.AdminRadioSelect(
                attrs={
                    'class': get_ul_class(self.radio_fields[db_field.name]),
                })
            kwargs['empty_label'] = _('None') if db_field.blank else None

        if 'queryset' not in kwargs:
            queryset = self.get_field_queryset(db, db_field, request)
            if queryset is not None:
                kwargs['queryset'] = queryset

        return db_field.formfield(**kwargs)
示例#3
0
def get_selectielijstklasse_field(db_field: Field, request: HttpRequest,
                                  **kwargs) -> forms.ChoiceField:
    return forms.ChoiceField(
        label=db_field.verbose_name.capitalize(),
        choices=get_selectielijst_resultaat_choices(kwargs.get("procestype")),
        required=not db_field.blank,
        help_text=db_field.help_text,
        widget=widgets.AdminRadioSelect(attrs={"id": "selectielijst-scroll"}),
    )
 class Meta:
     model = Subscription
     fields = '__all__'
     widgets = {
         'subscribed':
         widgets.AdminRadioSelect(
             choices=[(True, _('Subscribed')), (False, _('Unsubscribed'))],
             attrs={'class': options.get_ul_class(options.HORIZONTAL)})
     }
示例#5
0
class ItemStatusForm(ModelForm):
    status = ChoiceField(label=u"Статус",
                         widget=widgets.AdminRadioSelect(
                             attrs={'class': get_ul_class(admin.HORIZONTAL)}),
                         choices=ITEM_STATUS_CHOICES)

    class Meta:
        model = Item
        fields = '__all__'
示例#6
0
    def formfield_for_dbfield(self, db_field, request, **kwargs):
        if isinstance(db_field, ProcessDefinitionField):
            kwargs.update(
                {
                    "widget": widgets.AdminRadioSelect(),
                    "choices": get_process_definition_choices(),
                }
            )

        return super().formfield_for_dbfield(db_field, request, **kwargs)
示例#7
0
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        """
        Get a form Field for a ForeignKey.
        """
        if db_field.name in self.raw_id_fields:
            kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel)
        elif db_field.name in self.radio_fields:
            kwargs['widget'] = widgets.AdminRadioSelect(
                attrs={
                    'class': get_ul_class(self.radio_fields[db_field.name]),
                })
            kwargs['empty_label'] = db_field.blank and _('None') or None

        return db_field.formfield(**kwargs)
示例#8
0
 def formfield_for_choice_field(self, db_field, request=None, **kwargs):
     """
     Get a form Field for a database Field that has declared choices.
     """
     # If the field is named as a radio_field, use a RadioSelect
     if db_field.name in self.radio_fields:
         # Avoid stomping on custom widget/choices arguments.
         if 'widget' not in kwargs:
             kwargs['widget'] = widgets.AdminRadioSelect(attrs={
                 'class': get_ul_class(self.radio_fields[db_field.name]),
             })
         if 'choices' not in kwargs:
             kwargs['choices'] = db_field.get_choices(
                 include_blank=db_field.blank,
                 blank_choice=[('', _('None'))]
             )
     return formfield(db_field, **kwargs)
示例#9
0
 def formfield_for_choice_field(self, db_field, request=None, **kwargs):
     """
     Get a form Field for a database Field that has declared choices.
     """
     # If the field is named as a radio_field, use a RadioSelect
     if db_field.name in self.radio_fields:
         # Avoid stomping on custom widget/choices arguments.
         if "widget" not in kwargs:
             kwargs["widget"] = widgets.AdminRadioSelect(
                 attrs={
                     "class": get_ul_class(self.radio_fields[db_field.name])
                 })
         if "choices" not in kwargs:
             kwargs["choices"] = db_field.get_choices(
                 include_blank=db_field.blank,
                 blank_choice=[("", _("None"))])
     return db_field.formfield(**kwargs)
示例#10
0
def get_zaaktype_field(db_field: Field, request: HttpRequest, **kwargs):
    zaaktypen = get_zaaktypen()

    def _get_choice(zaaktype: dict) -> Tuple[str, str]:
        return (
            zaaktype["url"],
            f"{zaaktype['identificatie']} - {zaaktype['omschrijving']}",
        )

    choices = [(
        f"Service: {service.label}",
        [_get_choice(zaaktype) for zaaktype in _zaaktypen],
    ) for service, _zaaktypen in zaaktypen.items()]

    return forms.ChoiceField(
        label=db_field.verbose_name.capitalize(),
        widget=widgets.AdminRadioSelect(),
        choices=choices,
        required=False,
        help_text=db_field.help_text,
    )
示例#11
0
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        # copied from django.contrib.admin.wigets so we can override the label_for_value function
        # for the test raw id widget
        db = kwargs.get('using')
        if db_field.name == "test":
            widget = widgets.ForeignKeyRawIdWidget(db_field.rel,
                                                   self.admin_site,
                                                   using=db)
            widget.label_for_value = self.label_for_value
            kwargs['widget'] = widget

        elif db_field.name in self.raw_id_fields:
            kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel,
                                                             self.admin_site,
                                                             using=db)
        elif db_field.name in self.radio_fields:
            kwargs['widget'] = widgets.AdminRadioSelect(attrs={
                'class':
                options.get_ul_class(self.radio_fields[db_field.name]),
            })
            kwargs['empty_label'] = db_field.blank and _('None') or None
        return db_field.formfield(**kwargs)
示例#12
0
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        # Overrided from django/contrib/admin/options.py
        # Overrided with the only purpose to use the custom ForeignKeyRawIdWidgetMoreWords widget
        """
        Get a form Field for a ForeignKey.
        """
        db = kwargs.get('using')
        if db_field.name in self.raw_id_fields:
            kwargs['widget'] = ForeignKeyRawIdWidgetMoreWords(
                db_field.remote_field, self.admin_site, using=db)
        elif db_field.name in self.radio_fields:
            kwargs['widget'] = widgets.AdminRadioSelect(
                attrs={
                    'class': get_ul_class(self.radio_fields[db_field.name]),
                })
            kwargs['empty_label'] = _('None') if db_field.blank else None

        if 'queryset' not in kwargs:
            queryset = self.get_field_queryset(db, db_field, request)
            if queryset is not None:
                kwargs['queryset'] = queryset

        return db_field.formfield(**kwargs)
示例#13
0
 def test_no_can_add_related(self):
     rel = models.Individual._meta.get_field('parent').rel
     w = widgets.AdminRadioSelect()
     # Used to fail with a name error.
     w = widgets.RelatedFieldWidgetWrapper(w, rel, widget_admin_site)
     self.assertFalse(w.can_add_related)
示例#14
0
    def formfield_for_dbfield(self, db_field, **kwargs):
        """
        Hook for specifying the form Field instance for a given database Field
        instance.

        If kwargs are given, they're passed to the form Field's constructor.
        """
        # For DateTimeFields, use a special field and widget.
        if isinstance(db_field, models.DateTimeField):
            kwargs['form_class'] = forms.SplitDateTimeField
            kwargs['widget'] = widgets.AdminSplitDateTime()
            return db_field.formfield(**kwargs)

        # For DateFields, add a custom CSS class.
        if isinstance(db_field, models.DateField):
            kwargs['widget'] = widgets.AdminDateWidget
            return db_field.formfield(**kwargs)

        # For TimeFields, add a custom CSS class.
        if isinstance(db_field, models.TimeField):
            kwargs['widget'] = widgets.AdminTimeWidget
            return db_field.formfield(**kwargs)

        # For FileFields and ImageFields add a link to the current file.
        if isinstance(db_field, models.ImageField) or isinstance(
                db_field, models.FileField):
            kwargs['widget'] = widgets.AdminFileWidget
            return db_field.formfield(**kwargs)

        # For ForeignKey or ManyToManyFields, use a special widget.
        if isinstance(db_field, (models.ForeignKey, models.ManyToManyField)):
            if isinstance(
                    db_field,
                    models.ForeignKey) and db_field.name in self.raw_id_fields:
                kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel)
            elif isinstance(
                    db_field,
                    models.ForeignKey) and db_field.name in self.radio_fields:
                kwargs['widget'] = widgets.AdminRadioSelect(attrs={
                    'class':
                    get_ul_class(self.radio_fields[db_field.name]),
                })
                kwargs['empty_label'] = db_field.blank and _('None') or None
            else:
                if isinstance(db_field, models.ManyToManyField):
                    if db_field.name in self.raw_id_fields:
                        kwargs['widget'] = widgets.ManyToManyRawIdWidget(
                            db_field.rel)
                        kwargs['help_text'] = ''
                    elif db_field.name in (list(self.filter_vertical) +
                                           list(self.filter_horizontal)):
                        kwargs['widget'] = widgets.FilteredSelectMultiple(
                            db_field.verbose_name,
                            (db_field.name in self.filter_vertical))
            # Wrap the widget's render() method with a method that adds
            # extra HTML to the end of the rendered output.
            formfield = db_field.formfield(**kwargs)
            # Don't wrap raw_id fields. Their add function is in the popup window.
            if not db_field.name in self.raw_id_fields:
                formfield.widget = widgets.RelatedFieldWidgetWrapper(
                    formfield.widget, db_field.rel, self.admin_site)
            return formfield

        if db_field.choices and db_field.name in self.radio_fields:
            kwargs['widget'] = widgets.AdminRadioSelect(
                choices=db_field.get_choices(include_blank=db_field.blank,
                                             blank_choice=[('', _('None'))]),
                attrs={
                    'class': get_ul_class(self.radio_fields[db_field.name]),
                })

        # For any other type of field, just call its formfield() method.
        return db_field.formfield(**kwargs)
示例#15
0
    def formfield_for_dbfield(self, db_field, **kwargs):
        """
        Hook for specifying the form Field instance for a given database Field
        instance.

        If kwargs are given, they're passed to the form Field's constructor.
        """

        # If the field specifies choices, we don't need to look for special
        # admin widgets - we just need to use a select widget of some kind.
        if db_field.choices:
            if db_field.name in self.radio_fields:
                # If the field is named as a radio_field, use a RadioSelect
                kwargs['widget'] = widgets.AdminRadioSelect(attrs={
                    'class':
                    get_ul_class(self.radio_fields[db_field.name]),
                })
                kwargs['choices'] = db_field.get_choices(
                    include_blank=db_field.blank,
                    blank_choice=[('', _('None'))])
                return db_field.formfield(**kwargs)
            else:
                # Otherwise, use the default select widget.
                return db_field.formfield(**kwargs)

        # For DateTimeFields, use a special field and widget.
        if isinstance(db_field, models.DateTimeField):
            kwargs['form_class'] = forms.SplitDateTimeField
            kwargs['widget'] = widgets.AdminSplitDateTime()
            return db_field.formfield(**kwargs)

        # For DateFields, add a custom CSS class.
        if isinstance(db_field, models.DateField):
            kwargs['widget'] = widgets.AdminDateWidget
            return db_field.formfield(**kwargs)

        # For TimeFields, add a custom CSS class.
        if isinstance(db_field, models.TimeField):
            kwargs['widget'] = widgets.AdminTimeWidget
            return db_field.formfield(**kwargs)

        # For TextFields, add a custom CSS class.
        if isinstance(db_field, models.TextField):
            kwargs['widget'] = widgets.AdminTextareaWidget
            return db_field.formfield(**kwargs)

        # For URLFields, add a custom CSS class.
        if isinstance(db_field, models.URLField):
            kwargs['widget'] = widgets.AdminURLFieldWidget
            return db_field.formfield(**kwargs)

        # For IntegerFields, add a custom CSS class.
        if isinstance(db_field, models.IntegerField):
            kwargs['widget'] = widgets.AdminIntegerFieldWidget
            return db_field.formfield(**kwargs)

        # For CommaSeparatedIntegerFields, add a custom CSS class.
        if isinstance(db_field, models.CommaSeparatedIntegerField):
            kwargs['widget'] = widgets.AdminCommaSeparatedIntegerFieldWidget
            return db_field.formfield(**kwargs)

        # For TextInputs, add a custom CSS class.
        if isinstance(db_field, models.CharField):
            kwargs['widget'] = widgets.AdminTextInputWidget
            return db_field.formfield(**kwargs)

        # For FileFields and ImageFields add a link to the current file.
        if isinstance(db_field, models.ImageField) or isinstance(
                db_field, models.FileField):
            kwargs['widget'] = widgets.AdminFileWidget
            return db_field.formfield(**kwargs)

        # For ForeignKey or ManyToManyFields, use a special widget.
        if isinstance(db_field, (models.ForeignKey, models.ManyToManyField)):
            if isinstance(
                    db_field,
                    models.ForeignKey) and db_field.name in self.raw_id_fields:
                kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel)
            elif isinstance(
                    db_field,
                    models.ForeignKey) and db_field.name in self.radio_fields:
                kwargs['widget'] = widgets.AdminRadioSelect(attrs={
                    'class':
                    get_ul_class(self.radio_fields[db_field.name]),
                })
                kwargs['empty_label'] = db_field.blank and _('None') or None
            else:
                if isinstance(db_field, models.ManyToManyField):
                    # If it uses an intermediary model, don't show field in admin.
                    if db_field.rel.through is not None:
                        return None
                    elif db_field.name in self.raw_id_fields:
                        kwargs['widget'] = widgets.ManyToManyRawIdWidget(
                            db_field.rel)
                        kwargs['help_text'] = ''
                    elif db_field.name in (list(self.filter_vertical) +
                                           list(self.filter_horizontal)):
                        kwargs['widget'] = widgets.FilteredSelectMultiple(
                            db_field.verbose_name,
                            (db_field.name in self.filter_vertical))
            # Wrap the widget's render() method with a method that adds
            # extra HTML to the end of the rendered output.
            formfield = db_field.formfield(**kwargs)
            # Don't wrap raw_id fields. Their add function is in the popup window.
            if not db_field.name in self.raw_id_fields:
                # formfield can be None if it came from a OneToOneField with
                # parent_link=True
                if formfield is not None:
                    formfield.widget = widgets.RelatedFieldWidgetWrapper(
                        formfield.widget, db_field.rel, self.admin_site)
            return formfield

        # For any other type of field, just call its formfield() method.
        return db_field.formfield(**kwargs)