views:

51

answers:

2

I would like to check that I get not more than 3 relations set on a manytomanyfield.

I tried on the clean method to do this :

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

But self.tags returns not the current updates... only saved objects.

Do you have an idea to access to them ?

Thanks

+1  A: 

You could do this a couple of ways.

First, you could do it as part of the model's save()

In your model, do something like this:

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()

Or you could do it manually in the view.

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()
Brant
A: 

Brant is correct. However, I think a better way to do what you want is to use three individual ForeignKey fields instead of one ManyToMany.

Apreche