【Django3.0功能开发】apps篇:adminx更新旧表单同步更新到新表单通用方法

内容介绍

我们在后台编辑某个板块的内容的时候希望编辑完这个当前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)

效果演示

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/112798683