How can I change device creation to be managed only through the Client model, and restrict direct device creation? [closed]

I currently have a system where devices can be created and managed through the Device model directly. However, I want to change it so that devices can only be added or deleted through the Client model, and not directly through the Device model. Specifically, I want to:

Prevent creating or modifying devices directly via the Device model. Allow adding and deleting devices only through the Client model, so when working with a Client, I can manage their devices. Ensure that when adding a device to a Client, I don’t need to re-enter the Client information, as I’m already in the context of that Client.class Client(BaseModel): inn = models.CharField(max_length=14, unique=True, verbose_name="СТИР", validators=[validate_inn]) name = models.CharField(max_length=255, verbose_name="Имя пользователя") pinfl = models.CharField(max_length=14, blank=True, null=True, verbose_name="ПИНФЛ") phone = models.CharField(max_length=13, verbose_name="Телефон", null=True, blank=True) bank_name = models.CharField(max_length=255, verbose_name="Банк") address = models.CharField(max_length=255, verbose_name="Адрес") date_birth = models.DateField(null=True, blank=True, verbose_name="Дата рождения")

class Meta:
    verbose_name = "Клиент"
    verbose_name_plural = "Клиенты"

def clean(self):
    if self.phone:
        self.phone = self.phone.strip().replace(" ", "")  # Remove spaces

        if self.phone.startswith("998") and len(self.phone) == 12:
            self.phone = f"+{self.phone}"
        elif len(self.phone) == 9 and self.phone.isdigit():
            self.phone = f"+998{self.phone}"

def save(self, *args, **kwargs):
    self.date_birth = parse_birth_date(self.pinfl)
    super().save(*args, **kwargs)

def __str__(self):
    return self.inn

class Device(BaseModel): OWNER_CHOICES = [ ("bank", "Банк"), ("smartkassa", "Смарт-касса"), ("personal", "Личное"), ]

name = models.CharField(max_length=255, verbose_name="Название")
is_active = models.BooleanField(verbose_name="Активен", blank=True, default=True)
kkm_serial_number = models.CharField(max_length=255, unique=True, verbose_name="ККМ", help_text="Контрольно-кассовая машина")
fm_serial_number = models.CharField(max_length=255, verbose_name="ФМ", blank=True, null=True, help_text="Фиксальный память")
owner_type = models.CharField(max_length=10, choices=OWNER_CHOICES, verbose_name="Тип владельца")
client = models.ForeignKey(to=Client, verbose_name="Клиент", on_delete=models.CASCADE, related_name="devices", blank=True)

class Meta:
    verbose_name = "Устройства"
    verbose_name_plural = "Устройствы"

def __str__(self):
    return f"{self.name} ({self.kkm_serial_number})"
Вернуться на верх