Chức năng ForeignRelatedObjectsDescriptor.create_manager(...)
của Django sẽ tự động tạo các lớp RelatedManager
và sau đó khởi tạo một thể hiện của lớp được tạo động.Ghi đè các phương thức liên quan của Django
Nếu tôi muốn ghi đè phương pháp RelatedManager.add(...)
, tôi sẽ làm như thế nào?
Lớp học RelatedManager
được tạo trong tệp: django/db/models/fields/related.py
.
Một ví dụ về làm thế nào tôi muốn sử dụng một tùy chỉnh RelatedManager
là ...
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()?
Bất kỳ đề xuất sẽ được đánh giá cao.
người đàn ông, bạn là đạo diễn django của tôi làm tròn những phần này, bạn biết mọi thứ –
Điều này không hiệu quả. Tạo một Trình quản lý tùy chỉnh để đặt use_for_related_fields = True đảm bảo rằng lớp cha của Trình quản lý tùy chỉnh là Trình quản lý tùy chỉnh. Tuy nhiên, lớp ContactManager được định nghĩa động trong tệp được chỉ định trong câu hỏi của tôi và bất kỳ add() nào trong Trình quản lý tùy chỉnh bị ghi đè bởi định nghĩa động của Trình quản lý liên quan. Tôi có thể sửa đổi của addMan thêm() và thêm self.pre_save() và self.post_save() móc để được thực hiện trong quản lý tùy chỉnh và sau đó gửi một bản vá cho Django, nhưng tôi tự hỏi nếu có một cách tốt hơn tôi không nhận thức được. – brildum
-1 vì nó không hoạt động, '_related_' trong biến đó chỉ là phần lịch sử và không liên quan gì đến người quản lý của các trường liên quan. – Evgeny