То есть, есть объект Юзер, когда пользователь пишет /start боту - он попадает в базу данных.
Отношение 1 к 1, те только один уникальный промокод у одного уникального юзера.
Как мне при создании этого объекта юзер, создавать еще и объект Промокод, и прописывать этот промокод в подно из полей юзера?
Есть у меня в голове решение, но оно костыльное, по-любому есть какое-то просто решение.
Нынешний код
class UserModel(models.Model):
userStatuses = (
(1, 'Admin'), # an admin with all the perms
(2, 'Just a user'), # the user who has not bought premium sub
(3, 'Premium') # the user who indeed has bought the premium
)
userTelegramId = models.IntegerField('Телеграм айди', unique=True)
userTelegramNickname = models.CharField('Имя пользователя', max_length=50)
userStatus = models.IntegerField('Статус', editable=True, choices=userStatuses, default=2)
userBalance = models.DecimalField('Баланс', max_digits=6, decimal_places=0, default=0, help_text='сумма в рублях')
userPromo = models.CharField('Личный промокод', max_length=10, editable=False, unique=True, default=str(Promo(10)))
activatedPromo = models.CharField('Активированный промокод', max_length=10, default='No promo')
# --------------вот так вот наверное это должно выглядеть как-то-------------
# promocode = models.OneToOneField(PromocodeModel, verbose_name='Промокод', related_name='promo', on_delete=models.CASCADE)
def __str__(self) -> str:
return f'Пользователь {self.userTelegramNickname}'
class PromocodeModel(models.Model):
promo = models.CharField('Промокод', max_length=10, unique=True)
usesCount = models.IntegerField('Использован(раз)', choices=[(i, i) for i in range(0, 6)], default=0)
И еще на всякий случай вьюшку создания пользователя.
class UserCreateView(APIView):
def post(self, request) -> Response:
user = UserCreateSerializer(data=request.data)
if not user.is_valid():
return Response({'Error': 'User was not created.', 'status': 0}, status=403)
user.save()
return Response(user.data, status=201)