python3+django2+xadmin+djangoUeditor +stdimage的设计的天天生鲜项目(二)
1、创建商品app,goods,注意要注册到settings中INSTALLED_APPS中
2、创建goods的models,注意图片类型并非使用的django的ImageFields类型,而是使用的stdImageField,需要在settings中注册,并创建timage_img 和商品的image_img方法,为了之后在xadmin中能显示出图片,而不是路径
# Create your models here.
from django.db import models
# 将一对多的关系维护在GoodsInfo中维护,另外商品信息与分类信息都属于重要信息需要使用逻辑删除
from DjangoUeditor.models import UEditorField
from stdimage.models import StdImageField
class TypeInfo(models.Model):
# 商品分类信息 水果 海鲜等
isDelete = models.BooleanField(default=False)
tpic = StdImageField(
default='goods/default.jpg',
upload_to="goods/%Y/%m",
verbose_name=u"分类图标",
variations={'thumbnail': {'width': 100, 'height': 75}},
max_length=100)
ttitle = models.CharField(max_length=20, verbose_name="分类")
class Meta:
verbose_name = "商品类型"
verbose_name_plural = verbose_name
def url(self):
if self.tpic:
return self.tpic.url
else:
return "url为空"
def timage_img(self):
if self.tpic:
href = self.tpic.url # 点击后显示的放大图片
src = self.tpic.thumbnail.url # 页面显示的缩略图
# 插入html代码
image_html = '<a href="%s" target="_blank" title="传图片"><img alt="" src="%s"/>' % (href, src)
return image_html
else:
return '上传图片'
timage_img.short_description = '图片'
timage_img.allow_tags = True # 列表页显示图片
def __str__(self):
return self.ttitle
class GoodsInfo(models.Model):
# 具体商品信息
isDelete = models.BooleanField(default=False) # 逻辑删除
gtitle = models.CharField(max_length=20, verbose_name="商品名称", unique=True)
gpic = StdImageField(
default='goods/default.jpg',
upload_to="goods/%Y/%m",
verbose_name=u"商品图片",
variations={'thumbnail': {'width': 100, 'height': 75}},
max_length=100)
gprice = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="商品价格",
max_length=20) # 商品价格小数位为两位,整数位为3位
gunit = models.CharField(max_length=20, default='500g', verbose_name="单位重量")
gclick = models.IntegerField(verbose_name="点击量", blank=False, default=1)
gjianjie = models.CharField(max_length=200, verbose_name="简介")
gkucun = models.IntegerField(verbose_name="库存")
gcontent = UEditorField(verbose_name=u"商品详情", width=600, height=300, imagePath="goods/ueditor/",
filePath="goods/ueditor/", default='')
gtype = models.ForeignKey(TypeInfo, on_delete=models.CASCADE, verbose_name="分类") # 外键关联TypeInfo表
# gadv = models.BooleanField(default=False) #商品是否推荐
class Meta:
verbose_name = "商品"
verbose_name_plural = verbose_name
def url(self):
if self.gpic:
return self.gpic.url
else:
return "url为空"
def image_img(self):
if self.gpic:
href = self.gpic.url # 点击后显示的放大图片
src = self.gpic.thumbnail.url # 页面显示的缩略图
# 插入html代码
image_html = '<a href="%s" target="_blank" title="传图片"><img alt="" src="%s"/>' % (href, src)
return image_html
else:
return '上传图片'
image_img.short_description = '图片'
image_img.allow_tags = True # 列表页显示图片
def __str__(self):
return self.gtitle
3、在app下 新建adminx.py,并设置商品分类TypeInfo 和商品表GoodsInfo的显示方式
import xadmin
from .models import TypeInfo, GoodsInfo
# Register your models here.
class TypeInfoAdmin(object):
list_display = ['id', 'ttitle', 'timage_img']
list_per_page = 10
search_fields = ['ttitle']
list_display_links = ['ttitle']
class GoodsInfoAdmin(object):
list_per_page = 20
style_fields = {'gcontent': "ueditor"}
list_display = ['id', 'gtitle', 'gunit', 'gclick', 'gprice', 'image_img', 'gkucun', 'gjianjie']
list_editable = ['gkucun', 'gjianjie', 'gclick', 'gprice']
search_fields = ['gtitle', 'gjianjie']
list_display_links = ['gtitle']
xadmin.site.register(TypeInfo, TypeInfoAdmin)
xadmin.site.register(GoodsInfo, GoodsInfoAdmin)
注意list_display 中的图片字段,不是定义的数据库的字段。
4、进行数据库迁移python manage.py makemigratons 和migrate
5、创建管理员 python manage.py createsuperuser
6、启动项目python manage.py runserver
7、登陆http://127.0.0.1:8000/xadmin
添加商品类别,然后在添加商品
这是xadmin的效果哦,是不是比admin的好看多了,而且大家注意哦,这里有皮肤切换和菜单收缩的,将在下篇中介绍到。