diff --git a/server/apps/system/migrations/0018_auto_20210430_1156.py b/server/apps/system/migrations/0018_auto_20210430_1156.py new file mode 100644 index 0000000..218b434 --- /dev/null +++ b/server/apps/system/migrations/0018_auto_20210430_1156.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2021-04-30 03:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0017_userthird'), + ] + + operations = [ + migrations.AlterField( + model_name='userthird', + name='openid', + field=models.CharField(default='xx', max_length=200, unique=True, verbose_name='第三方账号'), + preserve_default=False, + ), + ] diff --git a/server/apps/system/models.py b/server/apps/system/models.py index 0afae87..5713fe8 100644 --- a/server/apps/system/models.py +++ b/server/apps/system/models.py @@ -229,4 +229,4 @@ class UserThird(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='关联账户', related_name='third_user') type = models.CharField('类型', max_length=50, choices=type_choices, default='wx_mp') - openid = models.CharField('第三方账号', null=True, blank=True, max_length=200) + openid = models.CharField('第三方账号', max_length=200, unique=True) diff --git a/server/apps/system/views.py b/server/apps/system/views.py index ac8277f..b3a5bba 100644 --- a/server/apps/system/views.py +++ b/server/apps/system/views.py @@ -343,7 +343,12 @@ class UserViewSet(PageOrNot, ModelViewSet): code+'&grant_type=authorization_code').content.decode('utf-8') info = json.loads(info) openid = info['openid'] - UserThird.objects.get_or_create(openid=openid, type='wx_mp', user=request.user, defaults={'openid':openid, 'user':request.user, 'type':'wx_mp'}) + if UserThird.objects.filter(openid=openid).exists(): + instance = UserThird.objects.get(openid=openid) + instance.openid = openid + instance.save() + else: + UserThird.objects.get_or_create(openid=openid, type='wx_mp', user=request.user, defaults={'openid':openid, 'user':request.user, 'type':'wx_mp'}) return Response({'wxmp_openid':openid},status=status.HTTP_200_OK)