So my last post was a quick hack attempt at this, but I have come up with a much cleaner method of getting a GAE ListProperty field to work with Django Forms (newforms). You simply have to create a new form field called ListPropertyChoice:
from django.newforms.fields import MultipleChoiceField
from appengine_django.models import BaseModel
class ListPropertyChoice(MultipleChoiceField):
def clean(self, value):
""" extending the clean method to work with GAE keys """
new_value = super(ListPropertyChoice, self).clean(value)
key_list = []
for k in new_value:
key_list.append(BaseModel.get(k).key())
return key_list
You can then use this in your forms:
...
from fields import ListPropertyChoice
class Form(djangoforms.ModelForm):
my_model = ListPropertyChoice(
widget=forms.CheckboxSelectMultiple(),
choices=[(m.key(), m.name) for m in db.Query(MyModel)]
)
class Meta:
model = ParentModel
Obviously you can use both the SelectMultiple widget and the CheckboxSelectMultiple widget and this same process could be easily duplicated for ChoiceField:
class GAEChoiceField(ChoiceField):
def clean(self, value):
""" extending the clean method to work with GAE keys """
value = super(GAEChoiceField, self).clean(value)
return BaseModel.get(value).key()