首页 > 解决方案 > django orm 如何确保 postgres 数组字段不是空列表?

问题描述

我有以下模型django。该模型创建了一个名为的数组字段,metric_vals但它允许该数组为空数组。有没有办法确保数组始终是非空数组?

from django.db import models
import uuid
from django.contrib.postgres.fields import ArrayField

class SampleModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    metric_vals = ArrayField(models.FloatField(null=False), null=False, default=list)

标签: pythondjangopostgresql

解决方案


像这样的东西:

from django.core.exceptions import ValidationError

class SampleModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    metric_vals = ArrayField(models.FloatField(null=False), null=False, default=list)

    def save(self, *args, **kwargs):
        if self.metric_vals == []:
            raise ValidationError('Empty list not allowed')

        super().save(*args, **kwargs)

推荐阅读