Назначение клиентов продавцу

В моем приложении есть два типа пользователей, продавцы и клиенты. Каждый клиент должен быть назначен только одному продавцу, но продавец может иметь несколько клиентов.

Я создал одну модель usermodel, так что все мои пользователи сохраняются в одном месте. В модели есть булево поле "is_seller" и другое булево поле "is_client". Они устанавливаются в true в зависимости от того, какую форму регистрации использует пользователь.

При регистрации клиента ему должно быть присвоено имя, но я не могу понять, как мне реализовать эту логику. Буду признателен за любые подсказки!

На вашем месте я бы сделал что-то вроде:

class Person(models.Model):
    class Meta:
        abstract = True
    user = models.OneToOne(User, on_delete=models.CASCADE)

    def is_seller(self):
        return hasattr(self, 'seller')

    def is_client(self):
        return hasattr(self, 'client')

class Seller(Person):
    pass

class Client(Person):
    seller = models.ForeignKey(Seller,
                               on_delete=models.CASCADE,
                               related_name="clients")

Из этого можно сделать следующее:

# example to read a person:
p = Person.objects.get(pk=1)
# if he's a seller, display all his clients:
if p.is_seller():
    for client in p.clients.all():
        print(f"Seller {p} has this client: {client}")

И наоборот: если он клиент, покажите его продавцу

# example to read a person:
p = Person.objects.get(pk=1)
# if he's a client, display all his seller:
if p.is_client():
    print(f"Client {p} has this seller: {p.seller}")

Я не тестировал его, но он очень близок к хорошо протестированному коду.

Вернуться на верх