#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