Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django: Override get_Form inlines

I want to override the get_form in a tabular admin in order to filter by current user. The thing is that I'm getting a error:

 object has no attribute 'current_user'
  • Admin.py

    class InvoiceDetail(admin.TabularAdmin):
        form = InvoiceDetailForm
        model = fa_invoice_lines
    
        def get_form(self, request, obj=None, **kwargs):
            form = super(InvoiceDetail, self).get_form(request, obj, **kwargs)
            form.current_user = request.user
            return form
    
    class Invoice(admin.ModelAdmin)
        form = InvoiceForm
        inlines =   [InvoiceDetail,]
    
  • Form.py

    class InvoiceDetailForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(InvoiceDetailForm, self).__init__(*args, **kwargs)
            self.fields['item'].queryset = fa_items.objects.filter(tenant=self.current_user)
    
        class Meta:
            model = fa_invoice_lines
    

I have used the same strategy in not inlines and it works It seems is not calling the get_form

like image 838
NeDiaz Avatar asked Jan 28 '26 03:01

NeDiaz


1 Answers

admin.TabularAdmin does not have a get_form method. The get_form function you defined is never being called.

You might want to look into get_formset method.

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin.get_formset

like image 193
Zahid Avatar answered Jan 30 '26 18:01

Zahid



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!