views:

24

answers:

1

I have the following model

class ActionConfirm(models.Model):
    CONFIRM_METHOD =  (
        (u'ce', u'Certificate'),
        (u'tf', u'Trainee Feedback'),
        (u'ms', u'Multi Source Feedback'),
        (u'rp', u'Reflection upon Practice'),
        (u'ot', u'Other - Please add/describe')
    )

    confirm_method = models.CharField(max_length=2, choices=CONFIRM_METHOD)
    user = User

and the following form

class ActionConfirmForm(forms.ModelForm):
    class Meta:
        model = ActionConfirm

and I know that I can get their current choices by doing

selected = ActionConfirm.objects.filter(user=user)

So how do I exclude values from the the confirm_method field which they have already selected?

If it was from a db I know I could do choices = ActionConfirm.objects.exclude(choice__in = selected) but I don't know how to do it when it is from a tuple of tuples.

A: 

You don't show the relationship between ActionConfirm and ConfirmChoices. Why is confirm_method a CharField rather than a ForeignKey?

However, if you can get the selected choices, you can exclude them in the __init__ of the form:

def __init__(self, *args, **kwargs):
    super(ActionConfirmForm, self).__init__(*args, **kwargs)
    selected_choices = whatever
    self.fields['confirm_method'].choices = [(k, v) for k, v in CONFIRM_METHOD
                                             if k not in selected_choices]
Daniel Roseman
`confirm_method` is a CharField because it's a tuple (`CONFIRM_METHOD`) with two-character "keys", rather than a reference to a separate model.
Dominic Rodger
@Dominic yes, I was confused by the (now-removed) reference to a `ConfirmChoices` model.
Daniel Roseman