モデルで対称関係を作成し、関係にフィールドを追加したいとします。私は(そしてまたthis another blog)を見つけて、自分のモデルを作成するステップに従った。DjangoのManyToManyFieldに対称オブジェクトを自動的に作成するには?
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')
ただし、管理者から関係を作成すると、1つだけが作成されます。あなたは問題を理解するのを助けてくれますか?
あなたは多分あなたは_only 1で何を意味するかを詳細にもう少し手の込んだcreated_のですか?あるいは、何が起こると思いますか? –
機能CreditCardIssuer.add_balancetransferは、管理者から関係を作成するときに達成したいことを示します。そうすれば、両方のオブジェクトの関係が作成されます。それを解決する時間を取ってくれてありがとう。 – noel
2つの関係は「自動的に」作成されません。あなたが期待している動作については100%明確ではありません。あなたは精緻化できますか? – coleifer