Django e-commerce part25 Product Categories
Product Categories のmodelをつくる
class Product(models.Model): title = models.CharField(max_length=120) description = models.TextField(blank=True, null=True) price = models.DecimalField(decimal_places=0, max_digits=20) active = models.BooleanField(default=True) categories = models.ManyToManyField('Category') default = models.ForeignKey('Category') objects = ProductManager() def __str__(self): return self.title def get_absolute_url(self): return reverse("product_detail", kwargs={"pk": self.pk}) ... class Category(models.Model): title = models.CharField(max_length=120, unique=True) slug = models.SlugField(unique=True) description = models.TextField(null=True, blank=True) active = models.BooleanField(default=True) timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) def __str__(self): return self.title ...
- category のmodelを作成する。
- Productに、categoriesと、defaultのcategory のfieldsを作成する。
- ここで注意するのは、foreginkey('Category') となっている点に注意。これは、多対一のリレーションを張るために、必要な処理。詳細は以下のとおり。
モデルフィールドリファレンス — Django 1.4 documentation
- なので、上記のコードにリレーションからの参照用のrelation_nameを明示する必要あり。これを反映させると以下のようなコードになる。
class Product(models.Model): title = models.CharField(max_length=120) description = models.TextField(blank=True, null=True) price = models.DecimalField(decimal_places=0, max_digits=20) active = models.BooleanField(default=True) categories = models.ManyToManyField('Category', blank=True) default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)