我有一个三个数字的矢量作为模型的名称。 即12-1-120 12-1-139 12-1-9等。
我想按降序对模型的实例进行排序,使用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 :(得分: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')