Python Web开发:创建“产品”模型
来自CloudWiki
背景
1张产品图片(6个栅格),1行产品标题和部分文字说明(6个栅格)
本节使用模型之间的一对多关系-外键,来实现多图字段功能。
如果将产品模型中的图像单独拆分出去组成一个“产品模型”,那么一张产品图片只属于一个产品,而一个产品可以包含多张产品图片。这就是一对多的关系。
实训步骤
创建“产品”类
from django.db import models from django.utils import timezone # Create your models here. class Product(models.Model): PRODUCTS_CHOICES = ( ('家用机器人', '家用机器人'), ('智能监控', '智能监控'), ('人脸识别解决方案', '人脸识别解决方案'), ) title = models.CharField(max_length=50, verbose_name=' 作品标题') description = models.TextField(verbose_name='作品详情描述') productType = models.CharField(choices=PRODUCTS_CHOICES, max_length=50, verbose_name='作品类型') price = models.DecimalField(max_digits=7, decimal_places=1,#decimal_places:小数的最大位数 blank=True, null=True, verbose_name='作品价格') publishDate = models.DateTimeField(max_length=20, default=timezone.now, verbose_name='发布时间') views = models.PositiveIntegerField('浏览量', default=0) def __str__(self): return self.title class Meta: verbose_name = '作品' verbose_name_plural = '作品' ordering = ('-publishDate', )
- title: 产品标题
- description: 产品的详细描述
- productType:产品类型
- __str__(self)函数:返回当前模型数据的title字段,使得该模型的每条数据在后台管理系统中均以每条数据的title字段来显示
创建“产品图片”类
该类从属于产品类,
class ProductImg(models.Model): product = models.ForeignKey(Product, related_name='productImgs', verbose_name='作品', on_delete=models.CASCADE) photo = models.ImageField(upload_to='Product/', blank=True, verbose_name='作品图片') class Meta: verbose_name = '作品图片' verbose_name_plural = '作品图片'
- product: 这是一个外键,用models.ForeignKey来声明,该外键第一个参数用于指明从属的类,此处为产品类Product ,另外一个参数
- related_name用来声明逆向名称,也就是说如果需要在Product类中调用产品图片可以用该名称来调用。
- photo:上传产品图片,其根路径由settings.py中的media参数设置(Python Web开发:创建数据模型),子路径由这里的upload_to参数制定。
注册模型
为了方便管理员管理模型,将上述模型注册到admin管理模块中。
productApp/admin.py:
from django.contrib import admin from .models import Product,ProductImg admin.site.register(Product) admin.site.register(ProductImg)
同步数据库
python manage.py makemigrations
Migrations for 'aboutApp': aboutApp\migrations\0002_auto_20210510_1051.py - Change Meta options on award - Alter field description on award - Alter field photo on award Migrations for 'productsApp': productsApp\migrations\0001_initial.py - Create model Product - Create model ProductImg
python manage.py migrate
Operations to perform: Apply all migrations: aboutApp, admin, auth, contenttypes, productsApp, sessions Running migrations: Applying aboutApp.0002_auto_20210510_1051... OK Applying productsApp.0001_initial... OK
验证
打开管理后台,http://127.0.0.1:8000/admin/