Django从模型中保存以前的对象

Chr*_*rei 11 python django django-models django-admin

在Django管理站点中,我有这个类.我想保存一个对象的先前版本(服务器),这是一个很多的字段来查找对象的更改.

使用普通的CharField可以正常工作,但是对于许多领域我都遇到了这个错误:

"<SourceDestinationGroup: asdas>" needs to have a value for field "id" before this many-to-many relationship can be used.
Run Code Online (Sandbox Code Playgroud)

这是我的对象类

class SourceDestinationGroup(models.Model):
    STATE_CHOICES = (
        ('C', 'in Change'),
        ('F', 'Finished')
        )
    ServerGroupName = models.CharField(max_length=256)
    Description = models.CharField(max_length=256,blank=True)
    Servers = models.ManyToManyField(Server)
    Status = models.CharField(max_length=1, choices=STATE_CHOICES, default='C')



    def __init__(self, *args, **kw):
        super(SourceDestinationGroup, self).__init__(*args, **kw)
        self._old_Servers = self.Servers

    def save(self, **kw):
       if self.Servers != self._old_Servers:
            self.Status = 'C'
            self._old_Servers = self.Servers

        super(SourceDestinationGroup, self).save(**kw)



   def __str__(self):
       return self.ServerGroupName
Run Code Online (Sandbox Code Playgroud)

Chr*_*rei 5

M2M关系不会保存为save()方法的一部分.在admin中,保存主对象,然后保存m2m关系; 因此,通过序列化save方法中的标记列表,您可以在保存新值之前打印标记的值.如果要安装"post m2m save"行为,则需要覆盖管理员本身的更新视图.