それ自体とのnull可能な外部キー関係を持つモデルがあります(この「自己」は、この外部キーを持つ任意のモデルにすることができます)。この外部キーは、循環関係を防ぐカスタム クラスです。
への呼び出しsuper()
が__init__
含まnull=True
れblank=True
ているため、South の検査規則に含める必要があります。これにより、少なくともスキーマ移行は機能しますが、移行は依然として失敗します。
次のコードは、カスタム外部キー、インスペクション ルール、および外部キーを使用するモデルを示しています。
# Foreign key
class ParentField(models.ForeignKey)
def __init__(self, verbose_name=None, **kwargs):
super(ParentField, self).__init__('self', verbose_name=verbose_name, null=True, blank=True, **kwargs)
@staticmethod
def checkcyclic(object, attr):
'''Check for a cyclic relationship'''
pass
# Introspection rules
add_introspection_rules([
(
[ParentField],
[],
{
'null': ['null', {'default': True}],
'blank': ['blank', {'default': True}],
}
)
], ["^test\.models\.fields\.ParentField"])
# Model
class Relation(Model):
parent = ParentField(related_name='child_set')
移行すると、次のエラーが発生します。
$ ./manage.py migrate
[..]
super(ParentField, self).__init__('self', verbose_name=verbose_name, null=True, blank=True, **kwargs)
TypeError: __init__() got multiple values for keyword argument 'to'
以下のようなルールを追加してみましたが、何も変わりませんでした。
'to': ['rel.to', {'default': 'test.models.Relation'}],
私が間違ったやり方をしていることや、これに対する解決策のヒントを教えてもらえますか?