2015-03-08 2 views
2

Je veux remplacer le get_form dans un admin tabulaire afin de filtrer par l'utilisateur actuel. La chose est que je reçois une erreur:django: Remplacer 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 
    

J'ai utilisé la même stratégie en pas en ligne et cela fonctionne Il semble n'appelle pas le get_form

+0

Aide S'il vous plaît !!!! – Gael

+0

Je vois que "de l'aide" est donnée mais je comprends aussi qu'elle n'est pas appréciée ni même acceptée. – raratiru

Répondre

1

Inspiré de the docs, j'ai mis en œuvre la solution suivante:

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