Size: a a a

Django [ru] #STAY HOME

2020 August 30

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
сделал таким образом
class PhoneModel(models.Model):
   phone = models.CharField(validators=[phone_regex], max_length=13, blank=True)
   is_verified = models.BooleanField(blank=False, default=False)
   counter = models.IntegerField(default=0, blank=False)

   def __str__(self):
       return f'{self.phone}'


class UserRoles(models.Model):
   is_client = models.BooleanField(default=False)
   is_specialist = models.BooleanField(default=False)


class ClientUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)
Ближе похоже к правде, но userroles и отношение измени, как я выше описал
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Не выходи из комнаты.
Сделай для userrole просто обычную модель с одним полем charfield, где храни название роли и свяжи юзера с ней через fk
немогу догнать, класс UserRoles должен же быть mtm к ClientUser и SpecialistUser?
class PhoneModel(models.Model):
   phone = models.CharField(validators=[phone_regex], max_length=13, blank=True)
   is_verified = models.BooleanField(blank=False, default=False)
   counter = models.IntegerField(default=0, blank=False)

   def __str__(self):
       return f'{self.phone}'


class UserRoles(models.Model):
   is_client = models.BooleanField(default=False)
   is_specialist = models.BooleanField(default=False)


class ClientUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


class SpecialistUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
немогу догнать, класс UserRoles должен же быть mtm к ClientUser и SpecialistUser?
class PhoneModel(models.Model):
   phone = models.CharField(validators=[phone_regex], max_length=13, blank=True)
   is_verified = models.BooleanField(blank=False, default=False)
   counter = models.IntegerField(default=0, blank=False)

   def __str__(self):
       return f'{self.phone}'


class UserRoles(models.Model):
   is_client = models.BooleanField(default=False)
   is_specialist = models.BooleanField(default=False)


class ClientUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


class SpecialistUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)
Зачем две модели юзера? Оо
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Не выходи из комнаты.
Зачем две модели юзера? Оо
так у них разные поля будут
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
немогу догнать, класс UserRoles должен же быть mtm к ClientUser и SpecialistUser?
class PhoneModel(models.Model):
   phone = models.CharField(validators=[phone_regex], max_length=13, blank=True)
   is_verified = models.BooleanField(blank=False, default=False)
   counter = models.IntegerField(default=0, blank=False)

   def __str__(self):
       return f'{self.phone}'


class UserRoles(models.Model):
   is_client = models.BooleanField(default=False)
   is_specialist = models.BooleanField(default=False)


class ClientUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


class SpecialistUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)
Userroles перепиши...
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
так у них разные поля будут
Не видно этого пока что. Но если и так, то делаешь из них fk на userroles
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Не выходи из комнаты.
Userroles перепиши...
так я же за него и спрашиваю)))
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
так я же за него и спрашиваю)))
Я выше писал, как. Достаточно одного поля - charfield, где хранить названия роли.
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Сделать choices
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Да, догнал
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Хотя можно и вовсе без модели обойтись. Просто добавить поле в модели юзеров
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Тут нет особого смысла с лишней таблицы, имхо
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Не выходи из комнаты.
Хотя можно и вовсе без модели обойтись. Просто добавить поле в модели юзеров
типа сразу роль захардкодить? но мне жу нужна будет возможность выбирать роль при регистрации
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Не выходи из комнаты.
Тут нет особого смысла с лишней таблицы, имхо
class PhoneModel(models.Model):
   phone = models.CharField(validators=[phone_regex], max_length=13, blank=True)
   is_verified = models.BooleanField(blank=False, default=False)
   counter = models.IntegerField(default=0, blank=False)

   def __str__(self):
       return f'{self.phone}'


class UserRoles(models.Model):
   ROLE_CHOICES = (
       ('Client', 'Client'),
       ('Specialist', 'Specialist'),
   )

   user_role = models.CharField(choices=ROLE_CHOICES, default=None)


class ClientUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


class SpecialistUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


Вот таким образом переделал
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
типа сразу роль захардкодить? но мне жу нужна будет возможность выбирать роль при регистрации
Не проблема выбрать её при регистрации...
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Boris Krutskih
class PhoneModel(models.Model):
   phone = models.CharField(validators=[phone_regex], max_length=13, blank=True)
   is_verified = models.BooleanField(blank=False, default=False)
   counter = models.IntegerField(default=0, blank=False)

   def __str__(self):
       return f'{self.phone}'


class UserRoles(models.Model):
   ROLE_CHOICES = (
       ('Client', 'Client'),
       ('Specialist', 'Specialist'),
   )

   user_role = models.CharField(choices=ROLE_CHOICES, default=None)


class ClientUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


class SpecialistUser(AbstractBaseUser):
   role = models.OneToOneField(UserRoles, on_delete=models.CASCADE, primary_key=True)
   phone = models.OneToOneField(PhoneModel, on_delete=models.CASCADE)


Вот таким образом переделал
Почему oto, а не fk?
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Может быть только один пользователь с ролью специалист/клиент?
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Не выходи из комнаты.
Может быть только один пользователь с ролью специалист/клиент?
Один номер телефона может быть подвязан только за одной ролью
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Что?
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Ну смотри.
источник