2015-03-08 3 views
2

Я хочу переопределить get_form в табличном админе, чтобы фильтровать текущий пользователь. Дело в том, что я получаю сообщение об ошибке:django: Override get_Form inlines

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 
    

Я использовал та же стратегия не в строках, а работает Кажется, не звонит get_form

+0

Помогите пожалуйста !!!! – Gael

+0

Я вижу, что дается «некоторая помощь», но я также понимаю, что она не оценена или даже не принята. – raratiru

ответ

1

Вдохновленный из the docs я реализовал следующее решение:

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