2010-09-08 44 views
0

值我有以下型號Django表單排除choicefield

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字段中排除值呢?

如果它是從一個數據庫我知道我可以做choices = ActionConfirm.objects.exclude(choice__in = selected)但我不知道如何做它時,它是從元組元組。

+0

只是爲了澄清 - 你試圖使它所以用戶只能創建'ActionConfirm'實例與'confirm_method'值*它們*沒有用於以前創建的'ActionConfirm'實例? – 2010-09-08 08:39:25

+0

是的,這是正確的。我沒有把上面的ActionConfirm模型中的所有字段。還有一個用戶字段,並且selected =應該是ActionConfirm.objects.filter(user = user)而不是ConfirmChoices。現在應該更新 – John 2010-09-08 08:44:44

回答

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] 
+0

'confirm_method'是一個CharField,因爲它是一個帶有雙字符「鍵」的元組('CONFIRM_METHOD'),而不是對單獨模型的引用。 – 2010-09-08 08:52:42

+0

@Dominic是的,我對(Confirm-Remove)模型的(現在刪除的)引用感到困惑。 – 2010-09-08 09:30:34