2010-04-27 9 views
3

Je voudrais vérifier que je n'ai pas plus de 3 relations établies sur un manytomanyfield.Comment limiter manytomanyfields sur un modèle?

J'ai essayé sur la méthode propre à faire:

if self.tags.count()>3: 
    raise ValidationError(_(u'You cannot add more than 3 tags')) 

Mais self.tags ne revient pas les mises à jour en cours ... sauvé des objets.

Avez-vous une idée pour y accéder?

Merci

Répondre

3

Vous pouvez le faire de plusieurs façons.

D'abord, vous pouvez le faire dans le cadre de la sauvegarde()

du modèle Dans votre modèle, faire quelque chose comme ceci:

def save(self): 
    # this may not be the correct check... but it will be something like this 
    if self.tags.count() > 3: 
    # raise errors here 
    else: 
    super(MODEL_NAME,self).save() 

Ou vous pouvez le faire manuellement dans la vue.

def some_view(request): 

    # all the request.POST checking goes here 

    the_model = form.save(commit=False) 
    if the_model.tags.count() > 3: 
    #error stuff 
    else: 
    the_model.save() 
+1

vous pouvez également le faire au niveau du formulaire et déclencher 'form.ValidationError' s'il ne répond pas à vos besoins. – Amyth

-2

Brant est correct. Cependant, je pense qu'une meilleure façon de faire ce que vous voulez est d'utiliser trois champs ForeignKey individuels au lieu d'un ManyToMany.

+0

Votre suggestion présenterait quelques problèmes, car les trois clés étrangères signifient des champs et des préséances nuls (first_tag est null, second_tag ​​est 'food'), ce qui est difficile. – fixmycode

Questions connexes