2012-04-05 4 views
0

Je construis une base de données dans django mais j'ai rencontré un peu d'un obstacle,Creatinga modèle multivaleur de champ personnalisé dans django

Je suis en train de faire quelque chose comme ceci: il y a un objet, et que l'objet a deux indices. chaque index a deux valeurs. Cela peut sembler confus, alors laissez-moi de cette façon:

livre a alpha et l'index index Beta indice alpha est à la position (4,3) bêta indice est à la position (7,4)
Notez que la les positions sont stockées séparément au lieu d'être sous forme entière ((4,3) au lieu de "43")

Pour implémenter cela sur une base de données, j'ai construit une classe pour index et pour Book, avec un étranger clé dans l'index. Comme si:

class index(models.Model): 
    book = models.ForeignKey(Books) 
    int1 = models.IntegerField() 
    int2 = models.IntegerField() 

Cependant, je voulais simplifier cela. Ça va devenir désordonné plus tard quand j'essayerai de donner d'autres utilisations pour la classe d'index. (Ne pas utiliser ce specifiquement pour la classe livre)

Idéalement je créerais un champ de valeur personnalisée à plusieurs qui plus tard, je pouvais utiliser librement dans ma classe de livres, comme ceci:

class Book(models.Model): 
     title=... 
     publisher= ... 
     indexA=customMulti-valueField() 

Est-ce possible? Comment définirais-je un tel champ? J'ai jeté un oeil à la documentation de django concernant la création de champs personnalisés, mais je ne pense pas que cela réponde à mon problème.

La principale préoccupation ici est d'avoir un type de données mysql qui peut stocker quelque chose comme le tuple python.

Merci.

Répondre

0

Si elle ne dispose de 2 indices, je voudrais simplement les stocker dans IntegerFields et créer une méthode qui les retourne à la fois, comme ceci:

class Book(models.Model): 
    title=... 
    publisher= ... 
    indexAX=models.IntegerField() 
    indexAY=models.IntegerField() 
    indexBX=models.IntegerField() 
    indexBY=models.IntegerField() 

    def indexA(self): 
     return self.indexAX, self.indexAY 

    def indexB(self): 
     return self.indexBX, self.indexBY 

Ensuite, vous pouvez l'utiliser comme ceci:

b = Book.objects.create('Title', 'Publisher', 1, 2, 3, 4) 
ax, ay = b.indexA() 
bx, by = b.indexB() 
+0

J'ai envisagé cette possibilité, mais c'est un peu un code désordonné à mon avis. J'aimerais vraiment personnaliser mon propre type de champ. Cependant, je ne suis même pas sûr que ce soit possible. Merci pour la réponse si =) –

Questions connexes