简体   繁体   English

django orm 如何确保 postgres 数组字段不是空列表?

[英]django orm how to make sure postgres array field is not an empty list?

I have the following model for django .我有以下 django 的django This model creates an array field called metric_vals but it is allowing the array to be an empty array.此 model 创建了一个名为metric_vals的数组字段,但它允许该数组为空数组。 Is there a way of making sure the array is always a non empty array?有没有办法确保数组始终是非空数组?

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)

You can use the validators kwarg:您可以使用validators kwarg:

from django.contrib.postgres.validators import ArrayMaxLengthValidator, ArrayMinLengthValidator


def get_default_list():
    return [float(1), float(2)]

class SampleModel(models.Model):
    metric_vals = ArrayField(
        models.FloatField(null=False), 
        null=False, 
        # ensure the default passes the validation
        default=get_default_list,
        # like this
        validators=[
           ArrayMinLengthValidator(2),
           ArrayMaxLengthValidator(10),
        ]
    )

Related:有关的:

Something like this:像这样的东西:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM