Django model重写save模块,有重复数据更新没有则插入数据

在项目中遇见个功能,有同样的用户id则刷新用户数据,没有则添加数据

刚开始准备写个检测方法,有的话则返回一个对应的实例对象,没有的话则用save直接创建实例对象


class TestUser(models.Model):
    user_id = models.IntegerField(verbose_name='分销员id')
    openid = models.CharField(max_length=30, verbose_name='openid')
    platform_user_id = models.IntegerField(verbose_name='平台用户id')
    nickname = models.CharField(max_length=100, verbose_name='用户名')
    phone = models.CharField(max_length=15, verbose_name='手机号')

    def check_data(self, item_user_id):
        order_exists = TestUser.objects.filter(user_id=item_user_id,)
        if order_exists.exists():
            print('user  存在' * 10)
            print("user  不用插入数据" * 10)
            return order_exists[0]
        else:
            return False

在views.py里面,我们之间调用check_data方法来检测:

    user = TestUser()
    temp = user.check_data(train_dic['id'])
    if temp:  # 如果有重复数据了,就更新数据
        # 有重复id,把查询出来的实例对象赋值给刚刚创建的实例对象,这样在下面sava时直接就保存了
        user = temp

后来想了下,直接重写了save方法,在save方法里面判断即可,不用在前边单独增加方法。

特别注意:model中储存是根据主键来储存的,在数据库里面我们基本默认主键是第一个id,在save时先查看实例对象是否有主键id,如果没有则创建新的主键并把数据存储到新的主键上;如果有则默认更新数据,不会再插入数据。

class TestUser(models.Model):
    user_id = models.IntegerField(verbose_name='分销员id')
    openid = models.CharField(max_length=30, verbose_name='openid')
    platform_user_id = models.IntegerField(verbose_name='平台用户id')
    nickname = models.CharField(max_length=100, verbose_name='用户名')
    phone = models.CharField(max_length=15, verbose_name='手机号')

    class Meta:
        verbose_name = '所有用户TEST'  # 后台显示名称
        verbose_name_plural = verbose_name  # 表示复数



    def check_data(self, item_user_id):
        order_exists = TestUser.objects.filter(user_id=item_user_id,)
        if order_exists.exists():
            print('user  存在' * 10)
            print("user  不用插入数据" * 10)
            return order_exists[0]
        else:
            return False

    def save(self):
        print(self.user_id)
        temp_user_id = self.user_id
        order_exists = TestUser.objects.filter(user_id=temp_user_id, )
        if order_exists.exists():
            print('用户已经存在,现在更新数据,更新的数据id:',order_exists.last().id)

            '''此处注意,这里默认更新的是最后一条数据'''
            self.id = order_exists.last().id
        else:
            print('直接增加数据')
            pass

        super().save()

我们在views.py里面正常调用save()方法即可

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值