创建项目和应用
启动一个名为mysite的新项目,其中包含一个名为shop的应用程序。
打开shell并运行以下命令:
django-admin startproject mysite
cd myshop/
django-admin startapp shop
将shop应用程序添加到INSTALLED_APPS
编辑项目的settings.py文件:
INSTALLED_APPS = [
# ...
'shop.apps.ShopConfig',
]
创建应用模型
商店的目录将包括按不同类别分类的产品。
产品信息包括:
- 类别(category):关联类别
- 名称(name):最大长度200,开启索引
- 描述(description):可选
- 图像(image):可选
- 价格(price):最大位数10,小数位数2
- 可用性(available):默认可用
- 自动生成创建和更新时间
编辑shop应用的models.py文件:
from django.db import models
from django.urls import reverse
class Category(models.Model):
name = models.CharField(max_length=200,db_index=True)
slug = models.SlugField(max_length=200,unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_list_by_category',args=[self.slug])
class Product(models.Model):
category = models.ForeignKey(Category,related_name='products',on_delete=models.CASCADE)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10,decimal_places=2)
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('name',)
index_together = (('id','slug'),)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_detail',args=[self.id,self.slug])
- ForeignKey是一对多关系,一个类别对应多个产品。
- slug讲为这个产品构建URL。
- decimal.Decimal是固定精度数字,包含两个参数:max_digits设置最大位数(包含小数位),decimal_places设置小数位数。
建议使用DecimalField来存储货币金额。可以避免浮点四舍五入问题。
在Meta中设置的参数含义:
- ordering:排序。
- verbose_name:在admin管理界面中显示中文,单数形式显示。
- verbose_name_plural:复数形式显示&#x