Django - 从另一个模型字段中获取默认值

时间:2017-10-08 10:04:15

标签: python django

我在django那里遇到了这个奇怪的问题 我有3个模型Books, Language, Book_language,其中我将图书映射到其语言。

来自django.db导入模型

class Book(models.Model):
    title = models.CharField(max_length=200)
    year = models.IntegerField()

class Language(models.Model):
    name = models.CharField(max_length=50)

class Book_language(models.Model):
    book = models.ForeignKey(Book)
    language = models.ForeignKey(Language)
    other_title = models.CharField(max_length=200, default=Book._meta.get_field('title').get_default()) # not working

到目前为止,我正在创建一本书和标题,后来用语言进行分配,所以所有语言的标题都相同,后来我明白标题在所有语言中可能都不一样,所以我想要other_title如果不提及(title)则默认为but not working,当我使用语言进行地图制作时,会显示在django admin 中。

1 个答案:

答案 0 :(得分:0)

你可以简单地覆盖save方法吗?

class Book_language(models.Model):
    book = models.ForeignKey(Book)
    language = models.ForeignKey(Language)
    other_title = models.CharField(max_length=200)

    def save(self, *args, **kwargs):
        if not self.other_title:
              self.other_title = self.book.title
        super(Book_language, self).save(*args, **kwargs)

对于updating-multiple-objects-at-once以前的空数据,您可以使用expressions F

from django.db.models import Q, F

empty_f = Q(other_title__isnull=True) | Q(other_title__exact='')
for bl in Book_language.objects.filter(empty_f):
    bl.other_title = bl.book.title
    bl.save()