Tengo el siguiente modelo:
class Category(models.Model): name = models.CharField(max_length=255) parent = models.ForeignKey('self', related_name='children')Mi pregunta es cómo podría evitar que el modelo se haga referencia a sí mismo (mismo objeto). El objeto solo debe poder apuntar a otras categorías pero no a sí mismo (los 'perros' pueden tener 'animales' primarios pero no pueden tener 'perros' primarios)
Puede anular el método de save para lanzar una excepción:
def save(self, *args, **kwargs): if self.parent and self.parent.name == self.name: raise ValidationError('You can\'t have yourself as a parent!') return super(Category, self).save(*args, **kwargs)Para la interfaz de usuario, se puede restringir el uso limit_choices_to : https://docs.djangoproject.com/en/4.0/ref/models/fields/#django.db.models.ForeignKey.limit_choices_to