Friday, May 3, 2013

Form constructor: Learn model instance for ModelChoiceField?

Hi all,

is it possible to obtain the model instance for a ModelChoiceField in
the constructor of the Form?

Here is a short example that illustrates the problem:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

class Department(models.Model):
pass


class Staff(models.Model):
departments = models.ManyToManyField(Department)


class SetDepForStaff_Form(forms.Form):
St = forms.ModelChoiceField(queryset=Staff.objects.all(),
widget=forms.HiddenInput())
Dep = forms.ModelChoiceField(queryset=Department.objects.all())

def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(SetDepForStaff_Form, self).__init__(*args, **kwargs)

# Working, but not what we need: passing in data via the form
constructor.
self.fields['Dep'].queryset = user.department_set.all()

# Wanted: How can we access the model instance for the St field?
# It would be the initial value if the form is created with
# SetDepForStaff_Form(initials=...)
# or the selected value if created with
# SetDepForStaff_Form(request.POST)
self.fields['Dep'].queryset =
model_instance_of(self.fields['St']).departments.all()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Any help would be very much appreciated!! :-)

Best regards,
Carsten

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment