django表示从choicefield中排除值

时间:2010-09-08 08:36:07

标签: django django-forms

我有以下型号

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

以及以下表格

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

我知道我可以通过

获得他们当前的选择
selected = ActionConfirm.objects.filter(user=user)

那么如何从confirm_method字段中排除它们已经选择的值?

如果是来自db,我知道我可以做choices = ActionConfirm.objects.exclude(choice__in = selected)但是当它来自元组元组时我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

您没有显示ActionConfirmConfirmChoices之间的关系。为什么confirm_method是CharField而不是ForeignKey?

但是,如果您可以获得所选的选项,则可以在表单的__init__中排除它们:

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]