我有两个模型在评价音乐曲目的应用程序中,我想重构模型。我应该拆分这个Django模型吗?
class Artist(models.Model):
""" Description: Author model """
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class MusicTrack(models.Model):
""" Description: Music Track Model """
title = models.CharField(max_length=20)
artist = models.ForeignKey(Artist)
link = models.URLField()
# rating data
rating_count = models.PositiveIntegerField()
score = models.DecimalField(max_digits=2, decimal_places=1)
def __unicode__(self):
return self.title
这是初始设置,我想从音乐应用程序的评级分开,但我不知道是否要重构的设置,我应该考虑评级数据重构到另一种模式? 我认为不要重构,因为当我显示音乐曲目信息时,我也必须显示收视率,这是每首歌曲的额外连接/查询。我更重视重构,因为我认为它有更好的分级评分,就像评论一样。
class Rating(models.Model):
rating_count = models.PositiveIntegerField()
score = models.DecimalField(max_digits=2, decimal_places=1)
def __unicode__(self):
...?
class MusicTrack(models.Model):
""" Description: Music Track Model """
title = models.CharField(max_length=20)
artist = models.ForeignKey(Artist)
link = models.URLField()
rating = models.OneToOneField(Rating)
def __unicode__(self):
return self.title
问题 1.我应该考虑重构MusicTrack
到一个单独的模型,Rating
? 2.什么是分离而不是分配的优点? 3.如果我将MusicTrack
重构为Rating
模型,那么__unicode__
方法将显示相关MusicTrack
的标题?
这样在不同的表上就不会有相同的值了吗?听起来更像是一个用户模型相关领域。我猜想同时更新这两个字段会非常困难,如果两个表的值相同,则会非常昂贵。 – Deena
阅读django中的信号。 https://docs.djangoproject.com/en/1.8/ref/signals/#django.db.models.signals.post_save 在post_save中有'创建'的参数。如果创建为True,则有人添加了新的费率。因此,将其添加到您的评分模型和post_save更新MusicTrack统计字段。 – ImportError