2017-05-04 5 views
0

je modèle avec IntegerRangeField en elle, qui renvoie les données comme, par exemple, NumericRange (1992, 1997, '[)') après avoir ajouté des objets à la base de données. J'ai besoin de la deuxième option de la gamme pour être également inclus, donc les limites devraient être comme '[]'. Je cherchais la solution dans le psycopg2 documentation, mais malheureusement je n'ai pas trouvé de réponse.Django comment changer la valeur des limites de IntegerRangeField

Aidez s'il vous plaît! Merci d'avance.

Mon actuelle models.py

from django.contrib.postgres.fields import IntegerRangeField 
from django.contrib.postgres.validators import RangeMinValueValidator, RangeMaxValueValidator 
from django.core.validators import MinValueValidator, MaxValueValidator 

from django.db import models 
from datetime import datetime 


class Bancnote(models.Model): 

    Dollar= 'Dollar' 
    Euro= 'Euro' 

    TYPE_CHOICES = (
     (Dollar, 'Dollar'), 
     (Euro, 'Euro') 
    ) 

    type = models.CharField(max_length=11, choices=TYPE_CHOICES, default=Dollar) 
    par = models.PositiveIntegerField() 
    year = IntegerRangeField() 
    size = models.CharField(max_length=7) 
    sign = models.TextField(max_length=250) 
    desc = models.TextField(max_length=500) 
    image = models.ImageField(upload_to='bons_images') 

    def __str__(self): 
     return str(self.par) + ' ' + self.type + ' ' + str(self.year.lower) + '-' + str(self.year.upper) 

Répondre

1

Le documentation officiel dit:

Quelles que soient les limites spécifiées lors de l'enregistrement des données, PostgreSQL renvoie toujours une plage sous une forme canonique inclut la limite inférieure et exclut la limite supérieure; C'est [).

Donc, je crains que vous ne puissiez pas vraiment changer cela. Vous pouvez cependant stocker les données comme d'habitude:

from psycopg2.extras import NumericRange 

Bancnote.objects.create(
    # specify other fields 
    par=NumericRange(1992, 1997, bounds='[]') 
) 
# assuming the object we created is with id=1 
bancnote = Bancnote.objects.get(id=1) 
print(bancnote.par) # NumericRange(1992, 1998, '[)') 

ce que je suppose que vous faites. Ce n'est pas très utile, mais c'est tout ce que je peux apporter.