覆盖外键字段

时间:2013-01-01 12:58:14

标签: django django-models

使用下面的django docs示例,如果我有类似的模型设置,它将看起来像这样。但是看着Album应用程序它可以用于我的另一件事我的问题将是ForeignKey如果我创建一个新的应用程序摄影师以及添加相册的内容我将如何实现这一点,相册对不同的人或背景来说意味着不同的东西

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Album(models.Model):
    artist = models.ForeignKey(Musician)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

class Photographer(models.Model):
    # some stuff here

2 个答案:

答案 0 :(得分:0)

将对象与任何其他对象相关联的一种方法是使用通用关系。

有关如何完成此操作的示例,请参阅:https://docs.djangoproject.com/en/1.4/ref/contrib/contenttypes/#generic-relations

泛型很好,因为你可以避免具体的继承,除非你需要它。

答案 1 :(得分:0)

您可以使用简单模型继承执行此操作,如下所示:

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Photographer(models.Model):
    # some stuff here    

class Album(models.Model):
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

class PhotoAlbum(Album):
    artist = models.ForeignKey(Photographer)

class MusicAlbum(Album):
    artist = models.ForeignKey(Musician)