默认值多对多字段不起作用,Django 1.8

Default Value Many To Many Field doesn't work, Django 1.8

我有以下型号:

class Editor(models.Model):
    nombre = models.CharField(max_length=30)
    domicilio = models.CharField(max_length=50)
    #....

class Autor(models.Model):
    nombre = models.CharField(max_length=30)
    apellido = models.CharField(max_length=40)
    email = models.EmailField(blank=True, verbose_name='e-mail')
    #....

def defaultM2M():
    return [Autor.objects.first().pk]

class Libro(models.Model):
    titulo = models.CharField(max_length=100)
    autores = models.ManyToManyField(Autor, default=default2M2)
    editor = models.ForeignKey(Editor, default=Editor.objects.filter(pk=1))

我有一个名为 defaultM2M 的函数来更改 'Libro' 的 ManyToMany 属性中的默认值,所以问题是当我创建一个新对象 'Libro' 时,这与我的默认 Autor 有关,无论我是否选择另一个 Autor,我的对象 'Libro' 都是用 2 'Autor' 个对象创建的,默认 Autor 和选择的 Autor。如何在没有这个问题的情况下设置 Autor 默认值?

谢谢

查看 Django 文档 default 似乎不是 ManyToMany 字段的选项。但是,您可以重载 save() 方法来实现您想要的:

def save(self, *args, **kwargs)
    if 'autores' not in kwargs:
         kwargs['autores'] = defaultM2M()
    super(Libro, self).save(*args, **kwargs)