假设我有两个模型Song和Person:
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模型中创建一个字段,用于存储此人收听音乐的日期列表以及他们收听的歌曲。
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字段似乎可以链接到另一个模型的一个或多个实例,但在这种情况下似乎没有什么用处。
有什么类型的字段可以使用吗?或者,有没有其他方法来存储所有这些信息?
我能想到的唯一的另一种方法是创建一个这样的模型,并有一个表,其中包含每个人听过的所有歌曲,并将它们链接到每个用户并添加日期:
class Song(models.Model):
person = models.OneToOneField(Person)
date = models.DateField()
songs = models.ManyToManyField(Song)我对数据库和django非常陌生,所以我真的不确定哪种方式是存储这种信息的正确方式。在个人资料下还是在不同的表中?
谢谢!
发布于 2019-10-26 14:26:50
我将创建第三个模型,listens,它将人和歌曲联系起来,并记录日期。这样,如果你的人物或歌曲模型变得更加复杂,你就不会有重复的数据。通常,您需要为您正在录制的每一种“事物”创建一个表,在本例中,您有一个人、一首歌和一个listen,这是两者之间的链接,并与日期相关联。
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)https://stackoverflow.com/questions/58568511
复制相似问题