Django模型基于其他字段的条件默认值



有两个表CompanyTemplate_message

每个公司都可以为每个消息提供所需的模板消息

消息有3种类型(邀请、拒绝、Job_offer(

现在我想为每个template_message设置一个默认文本,公司稍后可以在上更改它

但我不知道如何根据它们的类型为每个模板消息设置默认值

我设计的模型如下:

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重写ModelAdmin.get_changeform_initial_data方法。

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,以添加请求。GET['ssubject']=您的_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

但是更改了请求。内部GET/POST是一种糟糕的做法。

最新更新