Я пытаюсь использовать абстрактную модель базового класса в Django, чтобы избежать написания дубликата кода и непредвиденного поведения.
Вот упрощенная версия моего абстрактного базового класса:
class AbstractDocument(models.Model):
notes = models.CharField(max_length=255)
document = models.FileField(upload_to=document_file_path)
def document_file_path(instance, filename):
pass
class Meta:
abstract = True
Мне нужно определить метод document_file_path, иначе код выдаст ошибку. Я хочу определить другое поведение в подклассах для document_file_path. Ниже приведен пример:
class BookDocument(AbstractDocument):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
def document_file_path(instance, filename):
return f'books/{filename}'
Не похоже, что дочерний метод переопределяет родительский метод, потому что я получаю сообщение об ошибке, что document_file_path возвратил NoneType, когда я запускаю приведенный выше код. Я пытался заставить метод в AbstractDocument возвращать фактический путь, но дочерний метод также не переопределяет родителя в этом сценарии.
Есть ли какая-то причина, почему то, что я пытаюсь сделать, невозможно? Что-то мне не хватает в реализации? Есть ли другой или лучший способ сделать это sh? 1011
Заранее спасибо за помощь!