我正在学习使用Django并尝试设计一个旨在推荐音乐的系统。但是,当我考虑如何设计models.py时,我会陷入困惑。
每首歌都有它的标签,例如“悲伤”,“幸福”,“摇滚”,“R& B”,“爵士乐”,“男歌手”...... 当用户喜欢有“悲伤”和“摇滚”标签的音乐时,我想录制它。
我应该像这样设计models.py:
class userItem(models.Model):
userName=models.CharField(max_length=30)
tags_sadness=models.IntegerField()
tags_rock=models.IntegerField()
tags_...
当用户喜欢有“悲伤”和“摇滚”标签的音乐时, tags_sadness和tags_rock的值将增加。
我认为这不是一个好主意...因为有很多标签。但是当它来到django和数据库时,我是一只绿色的手......
你能帮帮我吗?
答案 0 :(得分:0)
标签可以用逗号(或其他一些字符......)分隔的字符串记录,如"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
...
答案 1 :(得分:0)
我建议你这样做:
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()
此模型的优势在于您不必为每个标记创建模型字段,您仍然可以获取每个标记的计数。