|
|
@@ -602,16 +602,8 @@ class Track(ScrobblableItem):
|
|
|
MEDIA_TYPE = MediaType.TRACK
|
|
|
COMPLETION_PERCENT = getattr(settings, "MUSIC_COMPLETION_PERCENT", 100)
|
|
|
|
|
|
- scrobblableitem_ptr = models.OneToOneField(
|
|
|
- ScrobblableItem,
|
|
|
- parent_link=True,
|
|
|
- primary_key=True,
|
|
|
- on_delete=models.CASCADE,
|
|
|
- related_name="as_track",
|
|
|
- )
|
|
|
-
|
|
|
artist = models.ForeignKey(Artist, on_delete=models.DO_NOTHING)
|
|
|
- albums = models.ManyToManyField(Album, related_name="tracks")
|
|
|
+ albums = models.ManyToManyField(Album, related_name="tracks", blank=True)
|
|
|
album = models.ForeignKey(Album, on_delete=models.DO_NOTHING, **BNULL)
|
|
|
musicbrainz_id = models.CharField(max_length=255, **BNULL)
|
|
|
|
|
|
@@ -628,6 +620,7 @@ class Track(ScrobblableItem):
|
|
|
|
|
|
@property
|
|
|
def primary_album(self):
|
|
|
+ """Return the first chronological album that we've seen this track on"""
|
|
|
if self.album:
|
|
|
return self.album
|
|
|
return self.albums.order_by("year").first()
|