問題

想象一下我有兩個模型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很新,所以我不確定儲存這種資訊的正確方法是什麼.在人的配置檔案下或在不同的表中?

謝謝!

  最佳答案

我將建立第三個模型,偵聽,它連結人和那個日期的歌曲和記錄.這樣,如果你的人或歌曲模型變得更復雜,你就不會有重複的資料.一般來說,你想要一張表格來記錄每種“事情”,在這種情況下,你有一個人,一首歌和一首聽,這是與日期相關的兩者之間的連結.

 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)
 

  相同標籤的其他問題

pythondjangodatabasemodel