0
저장하기 전에 인스턴스 값을 가져올 수 없다는 문제가 있습니다. save()
메서드에서 업데이트 된 값이 반환됩니다. 또한 너무 많은 쿼리를 실행 중이므로 __init__
에 저장할 수 없습니다.Django 모델을 저장하기 전에 속성 검색
class Users(models.Model):
username = models.CharField(max_length=20)
class Groups(models.Model):
name = models.CharField(max_length=100)
user = models.ManyToManyField(Users)
'''def __init__(self, *args, **kwargs):
super(Groups, self).__init__(*args, **kwargs)
#store original values
for field in Groups._meta.get_fields():
f = field
if not f.many_to_many:
setattr(self, '__original_%s' % f.name, getattr(self, f.name))
else:
userlist = Users.objects.all().filter(groups__id=self.pk)
setattr(self, '__original_userlist', set(userlist)) #set() to force lazy query and get original value'''
#function trying to reproduce __init__
def store(self):
for field in Groups._meta.get_fields():
f = field
if not f.many_to_many:
setattr(self, '__original_%s' % f.name, getattr(self, f.name))
else:
userlist = Users.objects.all().filter(groups__id=self.pk)
setattr(self, '__original_userlist', set(userlist)) #set() to force lazy query
def save(self, *args, **kwargs):
self.store()
print(getattr(self, '__original_userlist')) #return the list with users
super(Groups, self).save(*args, **kwargs)
print(getattr(self, '__original_userlist')) #return the list with users
내가 쿼리를 확인해야하기 때문에 가장 좋은 방법은 접근 할 확실하지 않다 : 사용자가 여기에 예를
내 모델은 단순화 된 것을 저장하는 경우에만 나는 쿼리를 실행합니다. 이전 값과 새 값을 비교하기 위해이 작업을 수행하고 있습니다. 그런 다음 로그 파일에 다른 값을 저장할 수 있습니다.