Django admin, filter objects for inline formset

前端 未结 3 938
忘掉有多难
忘掉有多难 2020-12-14 04:14

I\'ve got an inline formset and I would like to exclude some model objects from being displayed in the formset.

For eg. there is model B which has foreign key to mo

相关标签:
3条回答
  • 2020-12-14 04:55

    You can write your own manager to you model (special for formset) and use it.

    http://docs.djangoproject.com/en/dev/topics/db/managers/

    0 讨论(0)
  • 2020-12-14 05:06

    Replying to own question may seem a bit odd but I found another solution ;)

    There was a problem to provide custom queryset to a formset, there is no hook in case of inline formsets for this. So I subclassed BaseInlineFormSet and overridden the get_queryset method. Then I just provide this formset in InlineModelAdmin and it's done.

    Example:

    class MyFormSet(BaseInlineFormSet):
        def get_queryset(self):
            if not hasattr(self, '_queryset'):
                qs = super(MyFormSet, self).get_queryset().filter(main=False)
                self._queryset = qs
            return self._queryset
    

    and admin class:

    class MyInline(admin.TabularInline):
        model = m.MyModel
        formset =  MyFormSet
        ...
    
    0 讨论(0)
  • 2020-12-14 05:12

    In Django 3, you should use formfield_for_foreignkey.

    here is a working example :

    class CaracteristiqueInline(admin.TabularInline):
      model = Caracteristique
      formset = FiltreCaracteristiqueInline
    
      def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "id_Champ": # The FK in my table Caracteristique
            kwargs["queryset"] = Champ.objects.filter(est_DC_Champ=False)
            # Champ is the parent table of Caracteristique
            # est_DC_Champ is a field of the table Champ
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
      extra = 0
    

    With this, in your Tabular View, the choices in the dropdown of your FK Field will be filtered.

    0 讨论(0)
提交回复
热议问题