- March 2, 2008
- newforms modelchoicefield modelform
- 5 (after 5 ratings)
ModelChoiceField allows you to use filtered queries to simplify your forms. This is great for adding objects but can fall down when you edit an existing object and the original query no longer contains the referenced field (e.g. I like to use an "active" field in several objects).
The fix is simply to include an extra param: Q(pk=object_id). You have to do this in the init method to get the object_id.
A nice thing about this is that it works for ModelForms as well as custom Forms.
1 2 3 4 5 6 7 8 9 10
class MyModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(MyModelForm, self).__init__(*args, **kwargs) if self.instance: self.fields['myfield'].queryset = \ MyOtherModel.objects.filter( Q(active=True)|Q(pk=self.instance.myfield_id)) class Meta: model = MyModel
More like this
- Automatically setup raw_id_fields ForeignKey & OneToOneField by agusmakmun 6 months, 1 week ago
- Crispy Form by sourabhsinha396 7 months ago
- ReadOnlySelect by mkoistinen 7 months, 2 weeks ago
- Verify events sent to your webhook endpoints by santos22 8 months, 2 weeks ago
- Django Language Middleware by agusmakmun 8 months, 3 weeks ago