2012-07-25 72 views
0

我的问题如下:django中的状态对象

我正在为机器学习问题实施标签系统。简而言之:复杂的对象应该获得简单的标签信息(如标签)。 每个对象应该只有一个标签,并且该组标签是有限且静态的。 (例如:我想标记一个动物物体的所有属性到信息CAT,DOG等)

所以我有一个项目对象。我想用一个标签对象(myAnimal,label)将它保存为tupel。这个物体只能携带一个信息(例如DOG)。我怎么能做到这一点? 我想到了一个对象,它包含一些布尔值和我想要的布尔值,但这似乎不是一个很好的解决方案,因为可以设置多个布尔值。

我google了一个简单的枚举类似的解决方案,但没有发现任何令人满意的东西。

这将是很好,如果你能帮助我在这里;)

回答

1

由于您的标签都是静态的,预定义:

TAGS = ((1,'DOG'),(2,'CAT'),(3,'HORSE')) # and so on 

class MyThing(models.Model): 
    name = models.CharField(max_length=200) 
    tag = models.IntegerField(choices=TAGS) 

在这种模式下,你的东西只能有一个标签,你可以得到相关的变量为对象这样的:

foo = MyThing.objects.order_by('?')[0] # get some random object 
print 'My object is a ',foo.get_tag_display() 
+0

噢,看起来不错!我会尝试的。谢谢! – ruffy 2012-07-25 17:58:14

0

怎么样了一些关系,一个简单的模型?

class LabeledItem(models.Model): 
    my_object= models.OneToOneField(Item) 
    label = models.CharField() 

label属性也可以是一个OneToOneField,例如一个名为field属性的Label模型。

+0

是的,但是这将允许我使用任何**字符串作为标签来描述我的对象。不是离散的预定义集合。 – ruffy 2012-07-25 17:56:10

+0

的确如此,但django有一个Field.choices属性:https://docs.djangoproject.com/en/dev/ref/models/fields/#choices这可能是你想要的吗? – 2012-07-25 22:14:46