无法使用Djang为对象设置实例变量

2024-03-29 05:06:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法使用Django设置实例变量。在

我想要的是:

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

不幸的是,不断发生的是:

^{pr2}$

我相信这是因为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()

Tags: selfgetdatetimefacebookreturntimemodelssave
1条回答
网友
1楼 · 发布于 2024-03-29 05:06:09

您的status属性是全局的。它是User类的一部分,而不是实际实例的一部分。所以这实际上是正常的行为。set_status()将通过get_status()为每个User实例设置一个全局status。在

你应该重新设计你的模型。无论如何,您并不需要Status类。您可以在用户方法set_statusget_status中直接使用该业务逻辑。但是如果你需要跟踪每一个状态的变化,那么就有一个状态模型的外键。在

相关问题 更多 >