嗨,
所以我們可以說我有兩個型號:人和屬性一個多對多的關係連接(一個人可以有很多屬性,一個屬性可以被許多人共享)
class Attribute(models.model):
attribute_name = models.CharField(max_length=100)
attribute_type = models.CharField(max_length=1)
class Person(models.model):
article_name = models.CharField(max_length=100)
attributes = models.ManyToManyField(Attribute)
- 屬性可以是頭髮顏色,位置,大學學位等。
- 因此,例如,屬性可能具有'計算機科學'的'attribute_name'和'D'(度數)的'attribute_type'。
- 另一個例子是'倫敦','L'。
的問題
在這個網頁上,用戶可以通過屬性選擇的人。例如,他們可能希望看到所有居住在倫敦的人以及歷史和生物學(都與人際關係)都有學位的人。
我明白,這可能在以下(減免清晰度)表示:
Person.objects
.filter(attributes__attribute_name='London', attributes__attribute_type='L')
.filter(attributes__attribute_name='History', attributes__attribute_type='D')
.filter(attributes__attribute_name='Biology', attributes__attribute_type='D')
然而,用戶同樣可以要求誰擁有四種不同程度的用戶。關鍵是,我們不知道用戶在搜索功能中要求多少屬性。
問題
- 因此,這將是追加這些過濾器,如果我們不知道有多少,用戶會要求什麼類型的屬性的最佳方式?
- 像這樣追加過濾器是最好的方法嗎?
謝謝!
尼克
我認爲這是你用這個數據設計做的最好的,但是在迭代sel_att列表之前,我會親自用'result = Person.objects.all()'開始 - 更好的可讀性IMO。對於OP - 如果您可以選擇不同的數據模型,那麼您可能會從中受益。谷歌的'實體屬性值'進行一些討論。 – 2014-11-24 22:23:50
完美。我得到了這個工作!謝謝,Raydel。彼得,非常感謝小費 - 我會讀! – 2014-11-24 22:34:27