0

Django を使用してインスタンス変数を設定できないようです。

私がしたいことは次のとおりです。

a,b = User(), User()
a.set_status('abc')
b.set_status('def')
b.get_status()
>>> 'def'
a.get_status()
>>> 'abc'

残念ながら、次のことが起こり続けています。

a,b = User(), User()
a.set_status('abc')
b.set_status('def')
b.get_status()
>>> 'def'
a.get_status()
>>> 'def'

これは、status変数がインスタンス変数ではなくクラス変数であるためだと思います。上記のようにコードを動作させるにはどうすればよいですか? 私のモデルは以下です。

class Status(models.Model):

    def __init__(self, status = '', time=datetime.datetime.min, *args, **kwargs):
        self.status = status
        self.status_time = time
        super(Status, self).__init__(*args, **kwargs)

    def set_status(self, s):
        self.status = s
        self.status_time = datetime.datetime.now()
        self.save()
    def get_status(self):
        now = datetime.datetime.now()
        if now-self.status_time<datetime.timedelta(minutes=15):
            return self.status
        return None


class User(models.Model):
    facebook_id = models.CharField(max_length=200)
    friends = ListField()
    status = Status()

    @classmethod
    def create_user(cls, fid, friends):
        k = User()
        k.facebook_id = fid
        k.friends = friends
        k.status = Status()
        k.status.save()
        k.save()

    def login(self, facebook_friends):
        self.friends = facebook_friends
        self.save()

    def set_status(self, status):
        self.status.set_status(status)
        #return matching statuses

    def get_status(self):
        return self.status.get_status()
4

1 に答える 1

1

あなたのstatus属性はglobalです。User実際のインスタンスではなく、クラスの一部です。したがって、実際には正常な動作です。を介してすべてのインスタンスで使用可能set_status()なグローバルを設定します。statusUserget_status()

モデルを再設計する必要があります。Statusとにかく、クラスは本当に必要ありません。set_statusそのビジネス ロジックは、 User メソッドとに直接含めることができますget_status。ただし、すべてのステータス変更を追跡する必要がある場合は、ForeignKey を Status モデルに追加します。

于 2013-03-29T19:39:54.850 に答える