[英]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.