我会在这里澄清我的情况。我有一些模型:
class Messages(models.Model):
message_idnr = models.BigIntegerField(primary_key=True)
mailbox_idnr = models.ForeignKey(Mailboxes, null=True, db_column='mailbox_idnr', blank=True)
physmessage = models.ForeignKey(Physmessage, null=True, blank=True)
def __unicode__(self):
return '%s'%(self.physmessage)
class Meta:
db_table = u'messages'
class Mailboxes(models.Model):
mailbox_idnr = models.BigIntegerField(primary_key=True)
owner_idnr = models.ForeignKey(Users, null=True, db_column='owner_idnr', blank=True)
name = models.CharField(max_length=255)
permission = models.SmallIntegerField(default =2)
seq = models.BigIntegerField(default = 0)
class Meta:
db_table = u'mailboxes'
class Users(models.Model):
user_idnr = models.BigIntegerField(primary_key=True)
userid = models.CharField(max_length=100, unique=True)
passwd = models.CharField(max_length=130)
last_login = models.DateTimeField()
def __unicode__(self):
return '%s'%(self.userid)
class Meta:
db_table = u'users'
class Physmessage(models.Model):
id = models.BigIntegerField(primary_key=True)
messagesize = models.BigIntegerField()
rfcsize = models.BigIntegerField()
internal_date = models.DateTimeField(null=True, blank=True)
def __unicode__(self):
return '%s'%(self.id)
class Meta:
db_table = u'physmessage'
然后,我有一个views.py调用这个函数
def dbmail_move_email_to_dir(mailbox,maildir,mailvalue,destination):
db_user = Users.objects.get(userid = mailbox.email)
if maildir.lower() == 'inbox':
db_source_dir = Mailboxes.objects.get(Q(owner_idnr = db_user),Q(name = 'INBOX'))
else:
db_source_dir = Mailboxes.objects.get(Q(owner_idnr = db_user),Q(name = 'INBOX.%s'%maildir))
db_des_dir = Mailboxes.objects.get(Q(owner_idnr = db_user),Q(name = 'INBOX.%s'%destination))
for value in mailvalue:
print 'physical value of email %s'%value
print 'from maildir id %s'%db_source_dir.mailbox_idnr
print 'to maildir id %s'%db_des_dir.mailbox_idnr
print Physmessage.objects.get(id = value)
print len(Messages.objects.filter(physmessage = Physmessage.objects.get(id = value)))
for row in Messages.objects.filter(physmessage = Physmessage.objects.get(id = value)):
print 'delete each row %s'%row
print 'current mailbox %s'%row.mailbox_idnr.mailbox_idnr
row.mailbox_idnr=db_des_dir
print 'current mailbox %s'%row.mailbox_idnr.mailbox_idnr
row.save()
print 'current mailbox %s'%row.mailbox_idnr.mailbox_idnr
return True
当我从测试文件运行这个函数时,我得到类似的结果
physical value of email 15
from maildir id 128
to maildir id 126
15
1
delete each row 15
current mailbox 128
current mailbox 126
current mailbox 126
它会将mailbox_idnr 更改为新值,我在postgres 数据库中看到它。但是当我在视图中调用这个函数时,登录打印是一样的,但是mailbox_idnr没有改变。
physical value of email 46
from maildir id 125
to maildir id 128
46
1
delete each row 46
current mailbox 125
current mailbox 128
current mailbox 128
希望每个人都可以建议修复它。我有登录管理员,也可以更改它。但在我看来,我无法改变它。也删不掉。
谢谢,