簡體   English   中英

當我想像這樣存儲復雜數據時,如何設計models.py?

[英]How to design models.py when I want to store the complex data like this?

我正在學習使用Django並嘗試設計一個旨在推薦音樂的系統。但是,當我考慮如何設計model.py時,我會感到困惑。

每首歌曲都有其標簽,例如“悲傷”,“幸福”,“搖滾”,“ R&B”,“爵士”,“男歌手” ...當用戶喜歡具有“悲傷”和“搖滾”的音樂時標簽,我要記錄下來。

我應該像這樣設計models.py:

class userItem(models.Model):
    userName=models.CharField(max_length=30)
    tags_sadness=models.IntegerField()
    tags_rock=models.IntegerField()
    tags_...

當用戶喜歡帶有“ sadness”和“ rock”標簽的音樂時,tags_sadness和tags_rock的值將增加。

我相信這不是一個好主意...因為標簽太多了,但是當涉及到django和數據庫時我是一個綠色的手...

你可以幫幫我嗎?

標簽可以記錄在一個字符串中,並用逗號(或其他一些字符...)分隔,例如"sad,R&B,rock"

class userItem(models.Model):
    userName = models.CharField(max_length=30)
    userTags = models.CharField(max_length=50) # max length of the tags
    ...

我建議您這樣做:

class MusicTag(models.Model):
    tag=models.CharField(max_length=30)

class userItem(models.Model):
    userName=models.CharField(max_length=30)
    tags= models.ManyToManyField(MusicTag)

因此,當您要保存日期時,可以像這樣保存:

new_item= userItem() #model class
new_item.userName= "some data"
new_item.save()
if MusicTag.objects.filter(tag='R&R').exists():
   new_item.tags.add( MusicTag.objects.filter(tag='R&R')[0])
else:
   new_tag= MusicTag(tag='R&R')
   new_tag.save()
   new_item.tags.add(new_tag)

現在檢索標簽計數:

for item in MusicTag.objects.all():
    print item.tag , item.useritem_set.count()

此模型在這里的優點是,您不必為每個標簽創建模型字段,並且仍然可以獲取每個標簽的計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM