Могу ли я зарегистрировать параметр со значением по умолчанию, а затем использовать этот параметр в поле модели?

#python-3.x #django #wagtail

#python-3.x #django #Трясогузка

Вопрос:

Могу ли я каким-либо образом @register_setting задать параметр со значением по умолчанию, а затем использовать этот параметр в значении по умолчанию для поля? Я бы хотел, чтобы мои пользователи могли указывать глобальную налоговую ставку по умолчанию, но при необходимости изменять ее для каждого местоположения. Я уже использую параметр в другой функции той же модели, но полагаю, что проблема может заключаться в том, что в данном случае он не входит в функцию. Я попытался указать default=8.25 в конструкторе for default_sales_tax_rate , но, похоже, это не сработало. Я получаю NameError: name 'DefaultSalesTaxRate' is not defined error.

 @register_setting
class DefaultSalesTaxRate(BaseSetting):
    default_sales_tax_rate = models.DecimalField(
        max_digits=4,
        decimal_places=2,
        help_text="Default Sales Tax Rate",
        default=8.25
    )
 

locations.models.LocationPage (Страница)

 location_sales_tax_rate = models.DecimalField(max_digits=4, decimal_places=2, default=DefaultSalesTaxRate.objects.first().default_sales_tax_rate)
 

Я пытался присвоить переменной sales_default значение 8.25 if DefaultSalesTaxRate.objects.all().count() == 0 , но это тоже не сработало.

Я также попытался переопределить __init__ , чтобы добавить две вышеуказанные строки, что привело меня к новой ошибке, а именно: django.db.utils.OperationalError: no such table: locations_defaultsalestaxrate

Я думаю, может быть, перехват или сигнал для создания экземпляра параметра в таблице, если его нет, но я не уверен, куда подключаться или где вызывать сигнал.

Ответ №1:

Решается путем переопределения __init__

 def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if not self.location_sales_tax_rate:
            self.location_sales_tax_rate = DefaultSalesTaxRate.objects.first().default_sales_tax_rate