Quiero crear una relación simétrica en mi modelo y también añadir un campo en la relación. Me encontré con this blog (y también this another blog) y seguido los pasos en la creación de mis propios modelos.¿Cómo crear automáticamente objetos simétricos en ManyToManyField de Django?
class CreditCardIssuer(models.Model):
name = models.CharField(_('name'), max_length=256)
transfer_limits = models.ManyToManyField('self', through='Balancetransfer', related_name='no_transfer_allowed+', symmetrical=False, help_text=_('List of issuers to which balance transfer is not allowed.'))
def add_balancetransfer(self, creditcardissuer, until):
balance_transfer, _newly_created = Balancetransfer.objects.get_or_create(
no_transfer_from=self,
no_transfer_to=creditcardissuer,
until=until)
balance_transfer, _newly_created = Balancetransfer.objects.get_or_create(
no_transfer_from=creditcardissuer,
no_transfer_to=self,
until=until)
return balance_transfer
def remove_balancetransfer(self, creditcardissuer, until):
Balancetransfer.objects.filter(
no_transfer_from=self,
no_transfer_to=creditcardissuer,
until=until).delete()
Balancetransfer.objects.filter(
no_transfer_from=self,
no_transfer_to=creditcardissuer,
until=until).delete()
return
def get_transfer_limits(self, until):
return self.transfer_limits.filter(
no_transfer_to__until=until,
no_transfer_to__no_transfer_from=self)
class Balancetransfer(models.Model):
no_transfer_from = models.ForeignKey('CreditCardIssuer', related_name='no_transfer_from')
no_transfer_to = models.ForeignKey('CreditCardIssuer', related_name='no_transfer_to')
until = models.IntegerField(blank=True, null=True, help_text='Minimum card ownership period to allow balance transfer.')
class Meta:
unique_together = ('no_transfer_from', 'no_transfer_to')
Pero cuando creo la relación desde admin, solo se crea una. ¿Puedes ayudarme a resolver el problema?
¿Puede tal vez elaborar un poco más en detalle a qué se refiere con _only es created_? O especifica lo que esperas que pase? –
La función CreditCardIssuer.add_balancetransfer muestra lo que quiero lograr cuando creo una relación desde admin. De esta forma, la relación se creará para ambos objetos. Gracias por tomarse el tiempo para resolverlo. – noel
No se crearán dos relaciones "automáticamente". No obstante, no estoy 100% seguro sobre el comportamiento que estás esperando. ¿Puedes elaborar? – coleifer