Sometimes we need to build a ChoiceField from data in a Model or more than just one model via fk's but the ModelChoiceField is not that flexible. So, in order to obtain a list of tuples with pk and a descriptive text for the choices parameter of the ChoiceField use this little function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  | def prepare_choice_list(keys_QuerySet, values_QuerySet, foreignKey_field, localKey_field):
# gets the values of the FK in the model as a list of tuples in the form:
# [(row1_FKValue,),(row2_FKValue,),...]
# uses distinct() to not repeat values in the option list
        a = keys_QuerySet.distinct().values(foreignKey_field)
#and then expand the tuples in a single list of elements
	a = [v[foreignKey_field] for v in a]
	b = []
	for v in a:
# search the "human readable" values in the related model 
# for the keys before extracted
		bs = eval("values_QuerySet.get(%s__iexact = '%s').__unicode__()"%(localKey_field,v))
		b.append(bs)
#inserts a empty option as the default (first) option in the select
#just comment the two lines below if you don't want it
	a.insert(0,"")
	b.insert(0,"----------")
# the zip funtions joins two lists in the form [(list1_value, list2_value),...]
	return zip(a,b)
 | 
More like this
- Add Toggle Switch Widget to Django Forms by OgliariNatan 1 month, 4 weeks ago
 - get_object_or_none by azwdevops 5 months, 2 weeks ago
 - Mask sensitive data from logger by agusmakmun 7 months, 2 weeks ago
 - Template tag - list punctuation for a list of items by shapiromatron 1 year, 9 months ago
 - JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 1 year, 9 months ago
 
Comments
Please login first before commenting.