2012-03-12 95 views
0

我有一個三個數字的向量作爲模型的名稱。 即12-1-120 12-1-139 12-1-9等在Django模型中按陣列/整數列表存儲和排序

我想按降序排列模型的實例,使用Django來顯示12-1-139,12-1-120 ,12-1-9。

除了它總是像一個字符串,因此顯示12-1-9,12-1-139,12-1-120。

我試過使用'CommaSeparatedIntegerField',但它完全沒用,仍然以相同的方式。

我知道的唯一方法就是在技術上可行,是通過將三個單獨的「IntegerField」組合在一起排序,我認爲這太不切實際了。

任何指針,還是我堅持這種不切實際的方法?

我忘了提及,我還需要使用一個字符串有時調用這個對象,我不想不斷地將字符串轉換爲一個int,所以我用另一種方式做了它,並將一堆int整合到一個字符串使用某種計算字段。

這裏是我的基本代碼:

class MyModelName(models.Model): 
    name = models.CharField(max_length=15) 
    x = models.IntegerField(max_length=200) 
    y = models.IntegerField(max_length=200) 
    z = models.IntegerField(max_length=200) 

    def save(self, *args, **kwargs): 
     self.name = '-'.join([str(self.x), str(self.y), str(self.z)]) 
     super(MyModelName, self).save(*args, **kwargs) 

    class Meta: 
     ordering = ["-x","-y","-z"] 
+0

爲什麼具有三個整數字段是不切實際的? – 2012-03-12 23:15:27

+0

我只是認爲將它存儲到一個單獨的領域將會是一個很好的選擇。 – 2012-03-13 05:30:15

回答

2

三個整數字段是要走的路。

如果你希望把你的對象的方式,你可以隨時添加一個的unicode功能模型...

class Thing(models.Model): 
    x = models.IntegerField() 
    y = models.IntegerField() 
    z = models.IntegerField() 

    def __unicode__(self): 
     """ 
      Return a human-readable representation of the object. 
     """ 
     return '-'.join(self.x, self.y, self.z) 

https://docs.djangoproject.com/en/dev/ref/models/instances/#unicode

get_or_create例如:

s = '12-1-9' 
x, y, z = [int(c) for c in s.split('-')] 
thing, created = Thing.objects.get_or_create(x=x, y=y, z=z) 

自定義獲取或創建方法

class ThingManager(models.Manager): 

    def from_string(s): 
     x, y, z = [int(c) for c in s.split('-')] 
     obj, created = self.get_or_create(x=x, y=y, z=z) 
     return obj, created 


class Thing(models.Model): 
    objects = ThingManager() 
    # Snip 


-- 


my_new_thing, created = Thing.objects.from_string('12-1-9') 
+0

如果我想在得到包含「$ x- $ y- $ z」的字符串,即「12-1-9」 之後想要get_or_create這件事,我該怎麼辦?有沒有辦法讓一個字段是自動計算的字符串結合三個整數? – 2012-03-13 22:15:09

+0

在調用get_or_create之前,只需將字符串拆分爲整數。上面添加了示例代碼。 – 2012-03-15 01:06:44

+0

我使用get_or_create方法很多,所以我認爲總是做這樣的分割方法會很單調乏味。 – 2012-03-15 05:11:50