python - Django access data passed to form -
I got a choiceField
in my code, where I show filtered data. I need two arguments to filter the data. I do not have a problem at first, because I can take it directly from an object, but the second one is dynamically generated, here is some code:
class groupAd (forms.Form): def __init __ (self, * args, ** kwargs): self.pid = kwargs.pop ('parent_id', none) Super group (add, self) .__ init __ (* args, ** kwargs) parent_id = forms.IntegerField (widget = forms.HiddenInput) option = forms.ChoiceField (option = [[group.node_id, group.name] for group Filter in Objtree (name = 'group'), parent_id = 50) .distinct ()] + [[0, 'add a new one]]], .bjects.exe; Widget = forms.Select (attrs = {'id': 'group_select'}))
I would like to change the parent_id passed in Objtree.objects.filter
. As you can see, I tried to call init function, as well as call with kwargs ['initial'] ['parent_id']
and then with self
, But that does not work, because it is out of the scope ... this was my last attempt, enough to enter it either in the initial
parameter or straight trough parent_id
field Is required because it already holds its value (passed trough initial
).
Any help is appreciated, as I am out of ideas. Before I answer your question about some minor points
First of all, your field should probably be a ModelChoiceField
- instead of a list of options , It takes a queryset
parameter, which avoids the requirement for it and understanding the list to get the value.
Secondly, to get Objtree objects, your query is better by using double-underscore notation to exceed better relations:
Objtree Objects.filter ( Type__name = 'group', parent_id = 50)
Now, the real question. As you note, you can not reach local or example variables within field declarations. These are class-level characteristics, which are processed (through metaclass) when class is defined, not when it is instant, you need to do all the things in __init __
.
Like this:
class GroupAdd (forms.Form): parent_id = forms. IntegerField (widget = forms.HiddenInput) option = forms.ModelChoiceField (queryset = none) def __init __ (auto, * args, ** kwargs): pid = kwargs.pop ('parent_id', none) Super (GroupAdd, Self). __int __ (* Args, ** kwargs) self.fields ['Options']. Queryset = Objtree.objects.filter (type__name = 'group', parent_id = pid)
Comments
Post a Comment