I have two models: products and catregories. A product can belong to
exactly one category. To make navigation easier, I use nested
categories. I want to limit the admin's ability to add a product only
to the leaf categories (those with no children). So if I the following
structure
Electronics > Mobile Phones > Nokia
Electronics > Cameras
The admin can add product to the Nokia or Cameras categories.

Here is the code for my models (I got the Category model from a link
on this list):
**************************************
from django.db import models

# Create your models here.
class Category(models.Model):
        name = models.CharField(core=True, maxlength=200)
        slug = models.SlugField(prepopulate_from=('name',))
        parent = models.ForeignKey('self', blank=True, null=True,
related_name='child')
        description = models.TextField(blank=True,help_text="Optional")

        class Admin:
                list_display = ('name', '_parents_repr')

        def __str__(self):
                p_list = self._recurse_for_parents(self)
                p_list.append(self.name)
                return self.get_separator().join(p_list)


        def __unicode__(self):
                p_list = self._recurse_for_parents(self)
                p_list.append(self.name)
                return self.get_separator().join(p_list)

        def get_absolute_url(self):
                if self.parent_id:
                        return "/tag/%s/%s/" % (self.parent.slug, self.slug)
                else:
                        return "/tag/%s/" % (self.slug)

        def _recurse_for_parents(self, cat_obj):
                p_list = []
                if cat_obj.parent_id:
                        p = cat_obj.parent
                        p_list.append(p.name)
                        more = self._recurse_for_parents(p)
                        p_list.extend(more)
                if cat_obj == self and p_list:
                        p_list.reverse()
                return p_list

        def get_separator(self):
                return ' :: '

        def _parents_repr(self):
                p_list = self._recurse_for_parents(self)
                return self.get_separator().join(p_list)
        _parents_repr.short_description = "Tag parents"

        def save(self):
                p_list = self._recurse_for_parents(self)
                if self.name in p_list:
                        raise validators.ValidationError("You must not save a 
category in
itself!")
                super(Category, self).save()



class product(models.Model):
        name = models.CharField(core=True, maxlength=200)
        slug = models.SlugField(prepopulate_from=('name',))
        category = models.ForeignKey(Category, related_name='product
category')
        description = models.TextField(blank=True,help_text="Optional")

        class Admin:
                list_display = ('name', 'category')

        def __str__(self):
                return self.name
*****************************

I really appreciate the help!


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to