Передайте в модель аргумент Django "to_field", два поля, которые имеют UniqueConstraint

Что я пытаюсь сделать, это иметь поле "dependencia" в модели Puesto как Charfield, чтобы использовать естественные ключи и передать, например, это "[NTRA. SRA. DE LA ASUNCION,Capital]" и это может быть отображено на модель Dependencia. Я передаю эти аргументы из JSON фикстуры.

Поскольку поля "descripcion" и "departamento" в "Dependencia" не могут иметь аргумент unique= True, я не могу использовать их для указания на эти поля и в итоге получаю "dependencia" на модели Puesto, преобразованную из int (поскольку указывает на поле id в dependencia, которое является PK), в Charfield.

Есть ли способ использовать ограничение "unico_nombre_pordpto", или передать поле descripcion и departamento в "to_field"? Какие у вас есть предложения? Заранее спасибо.

МОДЕЛЬНАЯ ЗАВИСИМОСТЬ

class DependenciaManager(models.Manager):
    def get_by_natural_key(self, descripcion, departamento):
        return self.get(descripcion=descripcion, departamento=departamento)


class Dependencia(models.Model):
    descripcion = models.CharField(max_length=300, blank=False, null=False)
    cod_institucion = models.PositiveIntegerField(
        blank=True,
        null=True,
    )
    departamento = models.ForeignKey(
        Departamento,
        on_delete=models.PROTECT,
        blank=False,
        null=True,
        to_field="descripcion",
    )

    objects = DependenciaManager()

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=["descripcion", "departamento"], name="unico_nombre_pordpto"
            )
        ]

    def natural_key(self):
        return (self.descripcion, self.departamento)

    def __str__(self):
        return f"{self.descripcion}"

МОДЕЛЬ PUESTO

class Puesto(models.Model):
    numero = models.PositiveIntegerField(blank=False, null=False, primary_key=True)
    cargo = models.ForeignKey(
        Cargo,
        on_delete=models.PROTECT,
        blank=False,
        null=True,
        to_field="descripcion_cargo",
    )
    dependencia = models.ForeignKey(
        Dependencia,
        on_delete=models.PROTECT,
        blank=False,
        null=True,
        
    )

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