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 является плохой практикой.

Вернуться на верх