你可以在保存Django 1.7之前访问ManyToManyField值吗?

时间:2015-08-04 12:03:43

标签: python django

class Playlist(models.Model):
    name = models.CharField(max_length=50)
    num_of_songs = models.IntegerField(max_length=15)
    duration = models.IntegerField()
    songs = models.ManyToManyField("Song", blank=True)

    def save(self, *args, **kwargs):
        self.num_of_songs = self.songs.count() ==> this is wrong, but you get the idea
        super(Playlist, self).save(*args, **kwargs)

注意: 上面的保存方法不是原始代码的一部分,我添加了这个来向您展示我的目标。

如上所述,我在Django中有一个播放列表模型。当我从视图中创建播放列表时,我使用ModelForm来保存对象。换句话说,我做一个form.save(),然后根据数据库中保存的歌曲追加正确的num_of_songs和持续时间,然后我做一个playlist.save()。

这一切都运行得很好,但是如果我从django admin创建播放列表,我必须手动输入这些值,除非我从视图中更改列表,否则不会更改它们。所以在管理员中我可以输入错误的值,他们会保持这种状态。

当我尝试覆盖保存方法时,我无法获取所选歌曲,因为它们尚未保存在数据库中。

所以我的问题是,有没有办法在保存之前从ManyToManyField读取选定的值? (我想我可以使用一个表单,但是从管理员那里工作我不确定这是否可行。)

1 个答案:

答案 0 :(得分:2)

正如您将看到save_model覆盖到modelAdmin也将无法工作,因为django会在保存时重置manytomany。

检查:http://reinout.vanrees.org/weblog/2011/11/29/many-to-many-field-save-method.html