django admin dynamically set changeform initial data -
i'm implementing m2m relationship through intermediate model using default m2m widget. have person , project models related using membership model.
so far i've succeeded @ displaying default m2m widget in person alter form , creating intermediate model instances correctly, problem populating widget when person beingness modified.
this form class i'm using personadmin:
class personform(forms.modelform): projects = forms.modelmultiplechoicefield(models.project.objects.all(), widget=widgets.filteredselectmultiple( verbose_name="projects", is_stacked=false, attrs={'rows':'10'})) projects.required = false class meta: model = models.person fields = ['name', 'last_name', 'personal_id_number', 'personal_id_type', 'administrative_viability', 'observations'] def save(self, commit=true): ret = super(personform, self).save(commit) p in self.cleaned_data['projects']: models.membership.objects.create(person=self.instance, project=p) homecoming ret and personadmin itself:
class personadmin(admin.modeladmin): form = personform def get_changeform_initial_data(self, request): initial = super(personadmin, self).get_changeform_initial_data(request) initial['projects'] = models.person.get(pk=initial['person']).project_set.all() homecoming initial i tried setting initial value of projects in method get_changeform_initial_data that, doesn't work. overall looks it's beingness ignored, if i'm not overriding properly.
any help appreciated!
this question gave me thought of overriding __init__ method of personform:
def __init__(self, *args, **kwargs): if 'instance' in kwargs: person = kwargs['instance'] initial = {'projects': person.project_set.all()} kwargs['initial'] = initial super(personform, self).__init__(*args, **kwargs) i still don't know why overriding get_changeform_initial_data wasn't working.
django django-forms django-admin
No comments:
Post a Comment