1

ここで自分の状況をクリアします。私はいくつかのモデルを持っています:

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'

次に、1つの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

誰もがそれを修正することを提案できることを願っています. ログイン管理者がいて、それも変更できます。しかし、私の見解では、それを変更することはできません。それも削除できません。

ありがとう、

4

0 に答える 0