How To Put Data From Manytomanyfield To Choices In Multiplechoicefield
Solution 1:
If you're creating an instance of a conference model with your form, you should consider using Django's ModelForm
, which is designed to be used in the creation and editing of model instances.
In either case, you can use a ModelMultipleChoiceField
to serve your purpose, which is simply a MultipleChoiceField
backed by a queryset for its choices. You can use this field in either a standard Form
or a ModelForm
.
To customize the choices based on the request, you can set the queryset in your view.
For example:
forms.py
classCreateConferenceForm(forms.Form):
# An initial queryset is required, thisis overwritten in the view
participants = forms.ModelMultipleChoiceField(Person.objects.all())
views.py
def new_conference(request):
data = request.POST if request.method == 'POST'else None
conference_form = CreateConferenceForm(data=data)
conference_form.fields['participants'].queryset = my_person.friends.all()
ifdata:
if conference_form.is_valid():
# etc
return render...
Note that it is important for you to set the queryset prior to calling is_valid
on the form, since the queryset is used in validation, and prior to sending passing the form to a template, since the queryset is used to generate the choices shown.
Solution 2:
You can try this
classCreateConferenceForm(forms.Form):
"""
"""
participants = forms.MultipleChoiceField()
def__init__(self, *args, **kwargs):
# Pass the request in the form.
self.request = kwargs.pop('request', None)
super(CreateConferenceForm, self).__init__(*args, **kwargs)
if self.request:
pass# Get the person object according to you need. Whether from request or hard-coded.
person = Person.objects.filter().first()
friend_choices = [(dct['id'], dct['id']) for dct in (person.friends.values('id'))]
self.fields['participants'].choices = friend_choices
As friend field objects are also Person as MamyToMany with self. you can try this also
classCreateConferenceForm(forms.Form):
"""
"""# Replace second 'id' in values_list('id', 'id') with the field in you person model.
participants = forms.MultipleChoiceField(choices=list(Person.objects.filter().values_list('id', 'id')))
Post a Comment for "How To Put Data From Manytomanyfield To Choices In Multiplechoicefield"