django 如何使用ForeignKey相关模型的字段变量

ubof19bj  于 2023-04-07  发布在  Go
关注(0)|答案(2)|浏览(180)

我试图创建一个Album模型和一个Song模型,它们都有一个genre字段。我希望Song模型的genre字段与Album模型的默认字段相同。

class Album(models.Model):
    genre = models.TextField()

class Song(models.Model):`
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    genre = models.TextField() #The field I want to be same with its related model
dgenwo3n

dgenwo3n1#

您可以覆盖save()方法,并在保存之前添加默认流派:

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    genre = models.TextField() 

    def save(self, *args, **kwargs):
        if not self.genre:
            self.genre = self.album.genre

        super(Song, self).save(*args, **kwargs)
8aqjt8rx

8aqjt8rx2#

将其设置为null,如果它是None,则返回其Albumgenre

class Album(models.Model):
    genre = models.TextField()

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    _genre = models.TextField(null=True, default=None)

    @property
    def genre(self):
        if self._genre is not None:
            return self._genre
        return self.album.genre

    @genre.setter
    def genre(self, value):
        self._genre = value

这也使得以后更改Albumgenre时变得容易,在这种情况下,没有指定流派的歌曲将返回“新”genre

相关问题