Django:如何从另一个模型生成一个模型的数据?

Dan*_*leC 1 django django-models

我为书籍和作者创建了两种不同的模型,

class book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length = 200)

class author(models.Model):
    name = models.CharField(max_length=200)
    GENDER = (
        ('M', 'Male'),
        ('F', 'Female')
    )
    gender = models.CharField(max_length=1, choices=GENDER)
Run Code Online (Sandbox Code Playgroud)

是否可以不使用外键来链接两个模型,并根据图书信息(用户输入)自动生成作者?提前致谢!

C14*_*14L 5

您可以使用 Django 的信号

@receiver(post_save, sender=Book)
def make_author(sender, instance, created, **kwargs):
    if created:
        Author.objects.create(name=instance.author)
Run Code Online (Sandbox Code Playgroud)

Author每次创建新文件时Book,都会使用namefromBook.author字段创建一个新文件。

另一种方法是覆盖模型Book.objects.create()上的方法Book,并直接AuthorBook模型内部创建实例。优点是它允许您在创建(两个)对象时直接添加更多数据。缺点是它会Book依赖于 的存在Author