自定义save方法避免名字重复


class CategoryNameRepeated(Exception):
    pass

class Category(models.Model):
    name = models.CharField(max_length=128)
    parent = models.ForeignKey('self', blank=True, null=True, related_name='child_set')
    
    def save(self):
        if not self.parent:
            if Category.objects.get(name=self.name):
                raise CategoryNameRepeated
        super(Category, self).save()


    def __unicode__(self):
        return self.name



def add_category(request):
    if request.method == "POST":
        form = CategoryForm(data=request.POST)
        if form.is_valid():
            try:
                obj = form.save()          
                return HttpResponseRedirect(reverse('tribe.views.view_category', kwargs={'id':obj.id}))
            except CategoryNameRepeated:
                msg = _("category name repeated")
                return render_to_response('tribe/category_edit.html', {'form': form,'msg':msg})    
        else:
            return render_to_response('tribe/category_edit.html', {'form': form})
    else:
        form = CategoryForm()
    return render_to_response('tribe/category_edit.html', {'form': form})

你可能感兴趣的:(html)