在django中创建多值自定义字段模型

时间:2012-04-05 14:12:26

标签: django django-models

我正在django建立一个数据库,但我遇到了一些障碍,

我正在尝试这样做:有一个对象,该对象有两个索引。每个索引都有两个值。这可能听起来令人困惑,所以让我这样说吧:

Book有索引alpha和索引Beta    指数alpha位于(4,3)    指数β位于(7,4)位置 请注意,这些位置是单独存储的,而不是整数形式((4,3)而不是“43”)

为了在DB上实现这一点,我构建了一个索引和Book的类,索引中有一个外键。像这样:

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

但是,我想简化这个。当我尝试为索引类提供其他用途时,它会变得混乱。 (特别是不用于书类)

理想情况下,我会创建一个自定义多值字段,以后我可以在我的书类中自由使用,如下所示:

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

这可能吗?我该如何定义这样的Field? 我已经看过有关自定义字段创建的django文档,但我认为它不能解决我的问题。

这里主要关注的是拥有一个mysql数据类型,可以存储类似python元组的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

如果它只有2个索引,我只是将它们存储在IntegerFields中并创建一个返回它们的方法,如下所示:

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

然后你可以像这样使用它:

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