自定义save方法避免名字重复
class CategoryNameRepeated(Exception): passclass 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.namedef 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})
页:
[1]