django ограничение в моделях
Есть вот такие модели:
class Catrige(Product):
model = models.ForeignKey(Model,models.CASCADE, verbose_name="Модель")
original = models.BooleanField(verbose_name="Оригинал")
class Printer(Product):
firm = models.ForeignKey(Firm, models.CASCADE, verbose_name="Производитель")
printerModel = models.ForeignKey(PrinterModel, models.CASCADE, verbose_name="Модель принтера")
name = models.CharField(max_length=100, verbose_name="Имя принтера")
ip = models.CharField(max_length=30, verbose_name="ip-адрес")
status = models.ForeignKey(PrinterStatus, models.CASCADE, verbose_name="Статус принтера")
catriges = models.ManyToManyField(Catrige,verbose_name="Установленый картридж", blank=True)
Каким образом можно ограничить добавление картриджа если он уже используется? Именно на уровне модели что бы нельзя было не в админпанели добавлять уже используемые модели и на формах.
Ответы (1 шт):
Автор решения: Богдан Соловьев
→ Ссылка
зачем у принтеров и картриджей отношение многие ко многим? У вас же не может один картридж стоять в двух разных принтерах, сделайте просто внешний ключ, который не позволит разным принтерам иметь один и тот-же картридж.
Вам не нужны будут дополнительные ограничения, у каждого картриджа может быть только одно устройство, если модели будут примерно такими.
class Catrige(Product):
model = models.ForeignKey(Model,models.CASCADE, verbose_name="Модель")
original = models.BooleanField(verbose_name="Оригинал")
# тут делаем связь многие картриджи к одному устройству
printer = models.ForeignKey(Printer, related_name='catriges', on_delete=models.SET_NULL)
class Printer(Product):
firm = models.ForeignKey(Firm, models.CASCADE, verbose_name="Производитель")
printerModel = models.ForeignKey(PrinterModel, models.CASCADE, verbose_name="Модель принтера")
name = models.CharField(max_length=100, verbose_name="Имя принтера")
ip = models.CharField(max_length=30, verbose_name="ip-адрес")
status = models.ForeignKey(PrinterStatus, models.CASCADE, verbose_name="Статус принтера")
# тут связь нам не нужна, доступ к картриджам будет через related_name - cartriges
# catrige = models.ForeignKey(Catrige, related_name='printer', verbose_name="Установленый картридж", blank=True)
Printer.objects.first().catriges.all()
<QuerySet [Catrige1, Catrige2]>