我有两项服务:作业和服务器。它们非常相似,但服务器也有字段“主机”和“端口”。我需要模型来识别服务类型,如果是作业,它必须自动将“主机”和“端口”字段设置为None,并将其保存到数据库表中。这可能吗?我尝试过在串行化程序中使用不同类型的验证器,但没有任何效果。
下面是我的模型:
class Service(models.Model):
class ServiceType(models.TextChoices):
JOB = 'Job', _('Job')
SERVER = 'Server', _('Server')
type = models.CharField(max_length=10, choices=ServiceType.choices, default=ServiceType.JOB)
code_name = models.CharField(max_length=200)
human_name = models.CharField(max_length=200)
description = models.CharField(max_length=200)
host = models.CharField(max_length=200)
port = models.IntegerField(
validators=[MinValueValidator(0), MaxValueValidator(65535)])
def __str__(self):
return self.type
如您所见,只能有两种类型:服务器和作业。我需要自动设置主机和端口字段为无,如果类型== '作业'。听起来很容易,但我想我m not expirienced enough to find out the solution. I
也尝试使用验证器在我的串行化,但它没有帮助:
class ServiceSerializer(serializers.ModelSerializer):
class Meta:
model = Service
fields = '__all__'
def validate(self, data):
if data['type'] == 'Job':
data['host'] = None
data['port'] = None
return data
如果type ==“Job”,我希望看到数据库中的主机和发布字段等于None
1条答案
按热度按时间yws3nbqq1#
试试这个:
请记住,您必须为模型中可能未填充值的字段(在您的示例中为“host”和“port”)添加blank=True,null=True