首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:如何在数据库中存储日期和人们当天听过的歌曲的列表?

Django:如何在数据库中存储日期和人们当天听过的歌曲的列表?
EN

Stack Overflow用户
提问于 2019-10-26 14:13:48
回答 1查看 231关注 0票数 1

假设我有两个模型Song和Person:

代码语言:javascript
复制
class Person(models.Model):
    name = models.CharField(max_length=128)
    def __str__(self):
        return self.name

class Song(models.Model):
    name = models.CharField(max_length=128)
    def __str__(self):
        return self.name

我想在Person模型中创建一个字段,用于存储此人收听音乐的日期列表以及他们收听的歌曲。

代码语言:javascript
复制
2019-10-2 -> (Song 3, Song 25, Song 50)
2019-10-3 -> (Song 4, Song 5, Song 12)
2019-10-7 -> (Song 77, Song 22, Song 11)

ManyToMany字段似乎可以链接到另一个模型的一个或多个实例,但在这种情况下似乎没有什么用处。

有什么类型的字段可以使用吗?或者,有没有其他方法来存储所有这些信息?

我能想到的唯一的另一种方法是创建一个这样的模型,并有一个表,其中包含每个人听过的所有歌曲,并将它们链接到每个用户并添加日期:

代码语言:javascript
复制
class Song(models.Model):
    person = models.OneToOneField(Person)
    date = models.DateField()
    songs = models.ManyToManyField(Song)

我对数据库和django非常陌生,所以我真的不确定哪种方式是存储这种信息的正确方式。在个人资料下还是在不同的表中?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-26 14:26:50

我将创建第三个模型,listens,它将人和歌曲联系起来,并记录日期。这样,如果你的人物或歌曲模型变得更加复杂,你就不会有重复的数据。通常,您需要为您正在录制的每一种“事物”创建一个表,在本例中,您有一个人、一首歌和一个listen,这是两者之间的链接,并与日期相关联。

代码语言:javascript
复制
class Person(models.Model):
    name = models.CharField(max_length=128)
    def __str__(self):
        return self.name

class Song(models.Model):
    name = models.CharField(max_length=128)
    def __str__(self):
        return self.name

class Listens(models.Model):
    song = models.ForeignKey(Song, on_delete=models.Cascade)
    date = models.DateTimeField()
    person = ForeignKey(Person, on_delete=models.Cascade)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58568511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档