Как изменить/отфильтровать список параметров в TreeNodeChoiceField в TabularInlinePython

Программы на Python
Anonymous
Как изменить/отфильтровать список параметров в TreeNodeChoiceField в TabularInline

Сообщение Anonymous »

Как изменить список опций/списка выбора поля conto на основе значения gruppo_id?
conto — это ForeignKey для ветви дерева, описанной как model.ContoCOGE(MPTTModel).
Для каждой группы существует дерево, которое развивается до определенной глубины.Как фильтровать все деревья и в TreeNodeChoiceField в TablularInline отображать только их с помощью group_id?
В отладке formfield_for_foreignkey(self, db_field, запрос, **kwargs) переопределение возвращает правильное дерево. Но браузер отображает страницу с полем выбора со всеми деревьями.
#model.py
from mptt.models import MPTTModel, TreeForeignKey
from multigroup.models import Gruppo

class ContoCOGE (MPTTModel):
gruppo = models.ForeignKey(Gruppo, on_delete=models.CASCADE,related_name='contoCOCGE_gruppo')
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

class PncGen (models.Model):
gruppo = models.ForeignKey(Gruppo, on_delete=models.CASCADE)
#other stuff

class PncRighe (models.Model):
gruppo = models.ForeignKey(Gruppo, on_delete=models.CASCADE)
idPnc = models.ForeignKey(PncGen,on_delete=models.CASCADE) #puntatore alla testata
conto = models.ForeignKey(ContoCOGE,on_delete=models.CASCADE,blank=True, null=True)
#other stuff

#admin.py
from django_mptt_admin.admin import DjangoMpttAdmin

class PncRigheInline(admin.TabularInline):
model = PncRighe
autocomplete_fields = ['partitarioRiga','conto']
extra = 1

def filter_tree_queryset(self, queryset,request):
qs = queryset.filter(gruppo_id=int(request.session['gruppo_utente']))
return qs

def get_changeform_initial_data(self, request):
return {'gruppo': int(request.session['gruppo_utente'])}

def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'gruppo' or db_field.name == 'idRiga' or db_field.name == 'idPnc':
kwargs['widget'] = forms.HiddenInput()

if db_field.name == 'conto':

db = kwargs.get("using")
qs = self.get_field_queryset(db, db_field, request)
kwargs['queryset']=qs.filter(gruppo_id = request.session['gruppo_utente'] )

@admin.register(PncGen)
class PncGenAdmin(admin.ModelAdmin):
#...
inlines = (PncRigheInline,)


Подробнее здесь: https://stackoverflow.com/questions/790 ... ularinline

Вернуться в «Python»