DjangoのForeignRelatedObjectsDescriptor.create_manager(...)
関数は、RelatedManager
クラスを動的に作成し、続いて動的に作成されたクラスのインスタンスを初期化します。DjangoのRelatedManagerメソッドをオーバーライドする
RelatedManager.add(...)
メソッドをオーバーライドする場合はどうすればよいですか?
RelatedManager
クラスはファイル:django/db/models/fields/related.py
で作成されます。
私はカスタムRelatedManager
を使用したい方法の例は、
class Record(Model):
string = CharField()
class Managed(Model):
record = ForeignKey('Record')
boolean = BooleanField()
def view_function(...):
record = Record(string='Example')
record.save()
record.managed_set.add(Managed(boolean=True)) # How to override add()?
任意の提案をいただければ幸いです...です。
男、あなたは私のジャンゴの指導者です。これらの部分は、あなたが知っているものすべて –
これは動作しません。 use_for_related_fields = Trueを設定するカスタムマネージャを作成すると、RelatedManagerのスーパークラスがカスタムマネージャであることが保証されます。しかし、私の質問で指定されたファイルでは、RelatedManagerクラスが動的に定義され、カスタムマネージャのadd()は、RelatedManagerの動的定義によってオーバーライドされます。私は、RelatedManagerのadd()を変更し、self.pre_save()とself.post_save()を追加してカスタムマネージャ内で実装し、Djangoにパッチを送信することができますが、私がない方が良い方法があるかどうか疑問です知っている。 – brildum
-1それは動作しないので、その変数の '_related_'は歴史の一部であり、関連するフィールドの管理者とは関係ありません。 – Evgeny