2012-07-25 70 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