Django модель условное значение по умолчанию на основе другого поля
Имеется две таблицы Company
и Template_message
каждая компания может иметь желаемые шаблоны сообщений для каждого сообщения
сообщения имеют 3 типа (приглашение, отказ, предложение работы)
Теперь я хочу установить текст по умолчанию для каждого шаблона_сообщения, который компания может изменить позже
но я не знаю, как установить значение по умолчанию для каждого сообщения шаблона, основываясь на их типе
Модель, которую я разработал, приведена ниже :
class TemplateMessage(models.Model):
TEMPLATE_TYPE_CHOICES = (
('1', 'invitation'),
('2', 'Rejecting'),
('3', 'Job_offer_acceptance'),
)
type = models.CharField(max_length=4, choices=TEMPLATE_TYPE_CHOICES, default='1')
def subject_initials(type):
match type:
case 1:
return "[jobName] skills test invitation from [companyName]"
case 2:
return "Thank you from [companyName]"
case 3:
return "Job offer letter from [companyName]"
subject = models.CharField(max_length=256, default=subject_initials(type))
company = models.ForeignKey('Company', on_delete=models.CASCADE)
class Meta:
unique_together = ("company", "type")
def __str__(self):
return self.type
но это не работает, и когда я захожу в админ панель, текст темы не устанавливается на значение по умолчанию
вам следует переопределить метод ModelAdmin.get_changeform_initial_data
для вашего ModelAdmin
.
class MyModelAdmin(ModelAdmin):
... # any staff before
def get_changeform_initial_data(self, request):
initial_data = super().get_changeform_initial_data(request)
initial_data['subject'] = subject_initials(get_type_from(request))
return initial_data
... # any staff after
Другая возможность_ переопределения ModelAdmin.changeform
, добавить в request.GET['subject'] = your_initial_subject.
class MyModelAdmin(ModelAdmin):
... # any staff before
def changeform_view(self, request, *args, **kwargs):
request.GET._mutable = True
request.GET['subject'] = your_initial_subject
return super().changeform_view(request, *args, **kwargs)
... # any staff after
Но изменение внутреннего request.GET/POST является плохой практикой.