2010-09-08 5 views
0

У меня есть следующая модельДжанго формы исключают значения из 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, которое они уже выбрали?

Если это было из db, я знаю, что могу сделать choices = ActionConfirm.objects.exclude(choice__in = selected), но я не знаю, как это сделать, если это из кортежа кортежей.

+0

Просто чтобы прояснить - вы пытаетесь это сделать, так что пользователи могут создавать только 'экземпляры ActionConfirm' с параметрами 'confirm_method', которые * они * не использовали для ранее созданных экземпляров ActionConfirm'? –

+0

Да, это правильно. Я не помещал все поля в модель ActionConfirm выше. Также есть поле пользователя, а выбрано = должно быть ActionConfirm.objects.filter (user = user), а не ConfirmChoices. Должно быть обновлено сейчас – John

ответ

2

Вы не обнаружили взаимосвязей между ActionConfirm и ConfirmChoices. Почему 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') с двухсимвольными «ключами», а не ссылка на отдельную модель. –

+0

@ Доминичный да, меня смутило (теперь снятая) ссылка на модель ConfirmChoices. –

Смежные вопросы