Python django:重写get_表单内联线

Python django:重写get_表单内联线,python,django,django-admin,inlines,Python,Django,Django Admin,Inlines,我想覆盖表格管理员中的get_表单,以便按当前用户进行筛选。 问题是我遇到了一个错误: object has no attribute 'current_user' 管理员 class InvoiceDetail(admin.TabularAdmin): form = InvoiceDetailForm model = fa_invoice_lines def get_form(self, request, obj=None, **kwargs):

我想覆盖表格管理员中的
get_表单
,以便按当前用户进行筛选。 问题是我遇到了一个错误:

 object has no attribute 'current_user'
  • 管理员

    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
    
我在not inlines中使用了相同的策略,它很有效
似乎没有调用
get\u form

admin。TabularAdmin
没有
get\u form
方法。 从未调用您定义的
get\u form
函数

您可能需要研究
get\u formset
方法

受此启发,我实施了以下解决方案:

class Invoice(admin.ModelAdmin)
    form = InvoiceForm
    inlines =   [InvoiceDetail,]

def get_formsets_with_inlines(self, request, obj=None):
    for inline in self.get_inline_instances(request, obj):
        inline.form.current_user = request.user
        yield inline.get_formset(request, obj), inline
我看到有人给了我“一些帮助”,但我也明白,人们并不感激甚至不接受这种帮助。