MiddleКодЧастоЕщё не отвечали
Отрефакторить две Django-модели с дублем полей amount и to_dict
Две модели дублируют одни и те же четыре поля amount_* и метод to_dict. Отрефакторьте, убрав дублирование. Также пересмотрите выбор полей.
class PassengerAmount(models.Model):
amount_buy = models.FloatField(null=True)
amount_buy_currency_code = models.CharField(null=True, max_length=3)
amount_sell = models.FloatField(null=True)
amount_sell_currency_code = models.CharField(null=True, max_length=3)
def to_dict(self): ...
class BookingAmount(models.Model):
# те же четыре поля amount_* + status + identifier
def to_dict(self): ...
Отрефакторьте модели и отметьте проблемы корректности.
Вынесите общие поля amount_* и to_dict в абстрактную базовую модель — class AmountBase(models.Model): ... с class Meta: abstract = True — и наследуйте её в обеих моделях; абстрактные базы не создают таблицу, только наследуемые столбцы. Ключевая правка корректности: деньги во FloatField — баг (округление двоичного float) — используйте DecimalField. Также пересмотрите вольный null=True на полях amount/currency.
- ✗Использовать конкретное наследование вместо абстрактной базы
- ✗Оставлять
FloatFieldдля денег вместоDecimalField - ✗Забывать
class Meta: abstract = True, из-за чего создаётся лишняя таблица
- →Почему
FloatFieldневерен для денег, аDecimalFieldверен? - →Чем абстрактная базовая модель отличается от multi-table inheritance?