django: переопределить встроенные функции get_Form
Я хочу переопределить get_form
в табличном админе для фильтрации по текущему пользователю. Дело в том, что я получаю ошибку:
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
Я использовал ту же стратегию в не inlines, и она работает, кажется, не вызывает get_form
2 ответа
Вдохновленный документами, я реализовал следующее решение:
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
admin.TabularAdmin
не имеет get_form
метод. get_form
определенная вами функция никогда не вызывается.
Вы можете посмотреть в get_formset
метод.