内容介绍
我们在后台编辑某个板块的内容的时候希望编辑完这个当前A模块的内容按照一定的规则删减或者修改部分内容,将编辑的内容同步到B模块中,达到同样的内容根据不同的规则提供不同的用途。
重点在修改adminx中的内容。
models.py
# 内容基本信息模型
class ArticleInfo(models.Model):
home_type = models.CharField(
choices=HomeTypeChoices,
max_length=1, default=0,
verbose_name='主页展示', help_text="主页内容展示的模块"
)
channel_type = models.CharField(
choices=ChannelTypeChoices,
max_length=1, default=0,
verbose_name='频道展示', help_text="是否在频道列表中展示"
)
article_title = models.CharField(
max_length=500, default="",
verbose_name='内容标题', help_text="内容标题"
)
article_category = models.ForeignKey(
ArticleCategory, related_name='ArticleInfoCategory', on_delete=models.CASCADE,
verbose_name='内容类别', help_text="内容类别"
)
article_item = models.ForeignKey(
ArticleItem, related_name='ArticleInfoItem', on_delete=models.CASCADE,
verbose_name='内容二级分类', help_text="内容二级分类"
)
ai_type = models.CharField(
max_length=20,
verbose_name='AI分类', help_text="AI分类",
blank=True
)
article_summary = models.CharField(
max_length=100, default="",
verbose_name='文章摘要', help_text="文章摘要", blank=True
)
article_source = models.CharField(
max_length=100, default="",
verbose_name='文章来源', help_text="文章来源", blank=True
)
article_key_words = models.CharField(
max_length=300, default='["这里不能为空","随便填点"]',
verbose_name='文章关键词', help_text="文章关键词", blank=True
)
article_slug = models.SlugField(
default=default_time,
verbose_name='文章slug', help_text="文章slug",
primary_key=True
)
article_author = models.ForeignKey(
User, related_name='ArticleInfoAuthor', on_delete=models.CASCADE,
verbose_name='文章作者', help_text="文章作者",
)
article_tags = models.ManyToManyField(
ArticleTag, related_name='ArticleInfoTags',
verbose_name='文章标签', help_text="文章标签",
blank=True
)
article_publish_date = models.DateTimeField(
default=timezone.now,
verbose_name='文章发布日期', help_text="文章发布日期"
)
article_cover_1 = models.ImageField(
upload_to='ArticleCover/%Y/%m', default='ArticleCover/default.png',
verbose_name='文章自定义封面', help_text="文章自定义封面",
null=True, blank=True
)
article_cover_2 = models.CharField(
max_length=500, default="原创",
verbose_name="文章原文封面图片链接", help_text="文章原文封面图片链接",
null=True, blank=True
)
article_url = models.CharField(
max_length=500, default="原创",
verbose_name="文章原文链接", help_text="文章原文链接",
null=True, blank=True
)
article_video_url = models.CharField(
max_length=500, default="原创",
verbose_name="文章视频链接", help_text="文章视频链接",
null=True, blank=True
)
province = models.CharField(
max_length=20, default="全国",
verbose_name='省市', help_text="省市",
blank=True
)
city = models.CharField(
max_length=20, default="全地区",
verbose_name='城市', help_text="城市",
blank=True
)
share_num = models.IntegerField(default=0, verbose_name='转发数', help_text="转发数")
read_num = models.IntegerField(default=0, verbose_name='浏览数', help_text="浏览数")
fav_num = models.IntegerField(default=0, verbose_name='收藏数', help_text="收藏数")
status = models.CharField(
choices=ArticleStatusChoices, max_length=1, default=0,
verbose_name='审核状态', help_text="审核状态"
)
integral_num = models.IntegerField(default=0, verbose_name="购买内容使用积分")
created_date = models.DateTimeField(
default=timezone.now,
verbose_name='创建时间', help_text='创建时间'
)
class Meta:
verbose_name = '新闻基础信息'
verbose_name_plural = verbose_name
def __str__(self):
return self.article_title
# 主页内容模型(用于主页内容快速加载展示)
class ArticleInfoHome(models.Model):
home_type = models.CharField(
max_length=50, default="",
verbose_name='主页展示', help_text="主页内容展示的模块名称"
)
home_id = models.CharField(
max_length=50, default="",
verbose_name='主页展示', help_text="主页内容展示的模块id"
)
module_top = models.CharField(
choices=ModuleChoices, max_length=1, default=0,
verbose_name='模块内容是否置顶', help_text="模块内容是否置顶"
)
article_title = models.CharField(
max_length=500,
verbose_name='内容标题', help_text="内容标题"
)
article_category = models.CharField(
max_length=50, default="",
verbose_name='内容类别', help_text="内容类别"
)
article_item = models.CharField(
max_length=50, default="",
verbose_name='内容二级分类', help_text="内容二级分类"
)
article_summary = models.CharField(
max_length=100, default="",
verbose_name='文章摘要', help_text="文章摘要", blank=True
)
article_source = models.CharField(
max_length=100, default="",
verbose_name='文章来源', help_text="文章来源", blank=True
)
article_slug = models.SlugField(
default=default_time,
verbose_name='文章slug', help_text="文章slug",
)
article_author = models.CharField(
max_length=50, default="",
verbose_name='文章作者', help_text="文章作者",
)
article_publish_date = models.DateTimeField(
default=timezone.now,
verbose_name='文章发布日期', help_text="文章发布日期"
)
article_cover_1 = models.ImageField(
upload_to='ArticleCover/%Y/%m', default='ArticleCover/default.png',
verbose_name='文章自定义封面', help_text="文章自定义封面",
null=True, blank=True
)
article_cover_2 = models.CharField(
max_length=500, default="原创",
verbose_name="文章原文封面图片链接", help_text="文章原文封面图片链接",
null=True, blank=True
)
share_num = models.IntegerField(default=0, verbose_name='转发数', help_text="转发数")
read_num = models.IntegerField(default=0, verbose_name='浏览数', help_text="浏览数")
fav_num = models.IntegerField(default=0, verbose_name='收藏数', help_text="收藏数")
status = models.CharField(
max_length=50, default="",
verbose_name='使用状态', help_text="使用状态"
)
integral_num = models.IntegerField(default=0, verbose_name="购买内容使用积分")
class Meta:
verbose_name = '主页展示内容'
verbose_name_plural = verbose_name
def __str__(self):
return self.article_title
adminx.py
# 通用的更新数据方法 应用到主页和频道数据
def info_model(queryset_model, obj):
if obj.home_type:
# queryset_model.home_type = [i for i in HomeTypeChoices if str(obj.home_type) == i[0]][0][1]
queryset_model.home_type = [i for i in HomeTypeChoices if str(obj.home_type) == i[0]][0][1]
queryset_model.home_id = obj.home_type
if obj.channel_type:
# queryset_model.channel_type = [i for i in ChannelTypeChoices if str(obj.channel_type) == i[0]][0][1]
queryset_model.channel_type = obj.channel_type
queryset_model.article_title = obj.article_title
queryset_model.article_category = str(obj.article_category)
queryset_model.article_item = str(obj.article_item)
queryset_model.article_summary = obj.article_summary
queryset_model.article_source = obj.article_source
queryset_model.article_slug = obj.article_slug
queryset_model.article_author = obj.article_author.username
queryset_model.article_publish_date = obj.article_publish_date
queryset_model.article_cover_1 = obj.article_cover_1
queryset_model.article_cover_2 = obj.article_cover_2
queryset_model.share_num = obj.share_num
queryset_model.read_num = obj.read_num
queryset_model.fav_num = obj.fav_num
queryset_model.status = [i for i in ArticleStatusChoices if str(obj.status) == i[0]][0][1]
queryset_model.integral_num = obj.integral_num
queryset_model.save()
# 这里重写save_model同步数据
def save_models(self):
obj = self.new_obj
obj.save()
# 获取数据更新方式方法,获取结果为url中的add 或者 update
request_method = self.request.path.split("/")[-2]
# 主页展示内容
if obj.home_type != "0":
# 判断文章执行动作 add表示新增,update表示更新
if request_method == 'add':
queryset_model = ArticleInfoHome()
info_model(queryset_model, obj)
if request_method == 'update':
try:
queryset_model = ArticleInfoHome.objects.filter(article_slug=obj.article_slug)[0]
info_model(queryset_model, obj)
except IndexError as e:
queryset_model = ArticleInfoHome()
info_model(queryset_model, obj)
效果演示