You will have to use loop instead of just a one condition. Try this:
class Publisher(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=150, unique=True)
def save(self, *args, **kwargs):
if not self.id and not self.slug:
slug = slugify(self.name)
slug_exists = True
counter = 1
self.slug = slug
while slug_exists:
try:
slug_exits = Publisher.objects.get(slug=slug)
if slug_exits:
slug = self.slug + '_' + str(counter)
counter += 1
except Publisher.DoesNotExist:
self.slug = slug
break
super(Publisher, self).save(*args, **kwargs)