20👍
✅
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
...
1👍
You can write your own manager to you model (special for formset) and use it.
1👍
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.
- Django no module named "compressor"
- Django TransactionManagementError when using signals
- Pycharm error: Improperly configured
- Django admin colours
Source:stackexchange.com