I have a form inheriting from ModelForm as such:
class ChildModel(ModelForm):
class Meta:
model = Documents
fields = ('secretdocs')
widgets = {
'secretdocs': Select(attrs={'class': 'select'}),
}
The model "secretdocs" has a uid. But when it prints out the select and option, the option values appear as such:
<select class="select" id="id_secretdocs" name="secretdocs">
<option value="1">My Secret Doc</option>
</select>
But I want it to instead have the uid of the option:
<select class="select" id="id_secretdocs" name="secretdocs">
<option value="cd2feb4a-58cc-49e7-b46e-e2702c8558fd">My Secret Doc</option>
</select>
I've so far tried to use BaseForm's data object and overwriting Select's value_from_datadict method but I'm pretty sure that wasn't the right approach. Does anyone know how I can do this?
Thanks in advance.
You can do something like this:
class ChildModel(ModelForm):
secretdocs = forms.ChoiceField(choices=[(doc.uid, doc.name) for doc in Document.objects.all()])
class Meta:
model = Documents
fields = ('secretdocs', )
widgets = {
'secretdocs': Select(attrs={'class': 'select'}),
}