provice and city and address in accounts
This commit is contained in:
parent
42b4bbe740
commit
ba41e79b98
5 changed files with 1304 additions and 19 deletions
1250
apps/users/cities.py
Normal file
1250
apps/users/cities.py
Normal file
File diff suppressed because it is too large
Load diff
33
apps/users/migrations/0003_auto_20201115_0948.py
Normal file
33
apps/users/migrations/0003_auto_20201115_0948.py
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Generated by Django 3.1.3 on 2020-11-15 09:48
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0002_remove_user_code'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='user',
|
||||||
|
name='address',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='address'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='user',
|
||||||
|
name='city',
|
||||||
|
field=models.IntegerField(blank=True, null=True, verbose_name='City'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='user',
|
||||||
|
name='postal_code',
|
||||||
|
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='postal_code'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='user',
|
||||||
|
name='province',
|
||||||
|
field=models.IntegerField(blank=True, null=True, verbose_name='Province'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -65,6 +65,18 @@ class User(AbstractUser):
|
||||||
first_name = models.CharField(_('first name'), max_length=30, blank=True)
|
first_name = models.CharField(_('first name'), max_length=30, blank=True)
|
||||||
last_name = models.CharField(_('last name'), max_length=150, blank=True)
|
last_name = models.CharField(_('last name'), max_length=150, blank=True)
|
||||||
email = models.EmailField(_('email address'), blank=True)
|
email = models.EmailField(_('email address'), blank=True)
|
||||||
|
|
||||||
|
# country = models.CharField(_('country'), max_length=50, blank=True, null=True)
|
||||||
|
# province = models.CharField(_('province'), max_length=50, blank=True, null=True)
|
||||||
|
# city = models.CharField(_('city'), max_length=50, blank=True, null=True)
|
||||||
|
# postal_code = models.CharField(_('postal_code'), max_length=20, blank=True, null=True)
|
||||||
|
# address = models.TextField(_('address'), null=True, blank=True)
|
||||||
|
|
||||||
|
province = models.IntegerField(verbose_name=_("Province"), blank=True, null=True)
|
||||||
|
city = models.IntegerField(verbose_name=_("City"), blank=True, null=True)
|
||||||
|
postal_code = models.CharField(_('postal_code'), max_length=20, blank=True, null=True)
|
||||||
|
address = models.TextField(_('address'), null=True, blank=True)
|
||||||
|
|
||||||
is_staff = models.BooleanField(
|
is_staff = models.BooleanField(
|
||||||
_('staff status'),
|
_('staff status'),
|
||||||
default=False,
|
default=False,
|
||||||
|
|
@ -121,17 +133,6 @@ class User(AbstractUser):
|
||||||
self.otp_expire = timezone.now() + timedelta(minutes=5)
|
self.otp_expire = timezone.now() + timedelta(minutes=5)
|
||||||
self.otp_try = 0
|
self.otp_try = 0
|
||||||
|
|
||||||
# def set_code(self):
|
|
||||||
# for code in random.sample(range(10000, 100000), 90000):
|
|
||||||
# try:
|
|
||||||
# code = str(code)
|
|
||||||
# self.code = code
|
|
||||||
# return self.save()
|
|
||||||
# except:
|
|
||||||
# pass
|
|
||||||
#
|
|
||||||
# raise APIException('system error')
|
|
||||||
|
|
||||||
def otp_is_valid(self):
|
def otp_is_valid(self):
|
||||||
return bool(self.otp and timezone.now() <= self.otp_expire)
|
return bool(self.otp and timezone.now() <= self.otp_expire)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,8 @@ from django.utils import timezone
|
||||||
class PublicUserSerializer(serializers.ModelSerializer):
|
class PublicUserSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ('avatar', 'name', 'username', 'email', "first_name", "last_name", "uuid")
|
fields = ('avatar', 'name', 'username', "first_name", "last_name", "uuid")
|
||||||
read_only_fields = ['avatar', 'name', 'username', 'email', 'first_name', 'last_name', "uuid"]
|
read_only_fields = ['avatar', 'name', 'username', 'first_name', 'last_name', "uuid"]
|
||||||
|
|
||||||
# def to_internal_value(self, data):
|
|
||||||
# code = data.get('code')
|
|
||||||
# if code:
|
|
||||||
# return User.objects.get(code=code)
|
|
||||||
|
|
||||||
|
|
||||||
class AccountSerializer(serializers.ModelSerializer):
|
class AccountSerializer(serializers.ModelSerializer):
|
||||||
|
|
@ -31,6 +26,11 @@ class AccountSerializer(serializers.ModelSerializer):
|
||||||
'avatar',
|
'avatar',
|
||||||
'iban',
|
'iban',
|
||||||
'iban_verified',
|
'iban_verified',
|
||||||
|
# 'country',
|
||||||
|
'province',
|
||||||
|
'city',
|
||||||
|
'postal_code',
|
||||||
|
'address',
|
||||||
)
|
)
|
||||||
read_only_fields = ['uuid', 'balance', 'email', 'phone_number', 'iban_verified']
|
read_only_fields = ['uuid', 'balance', 'email', 'phone_number', 'iban_verified']
|
||||||
|
|
||||||
|
|
@ -51,6 +51,7 @@ class RequestOTPSerializer(serializers.ModelSerializer):
|
||||||
write_only_fields = []
|
write_only_fields = []
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
|
# TODO: move it to query set
|
||||||
validated_data = self.validated_data
|
validated_data = self.validated_data
|
||||||
user = User.objects.filter(phone_number=validated_data['phone_number']).first()
|
user = User.objects.filter(phone_number=validated_data['phone_number']).first()
|
||||||
if not user:
|
if not user:
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from django.contrib.auth.views import LoginView
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope
|
from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope
|
||||||
from rest_framework import generics, status
|
from rest_framework import generics, status, permissions
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue