Django模型属性:缺少1个必需的位置参数:

时间:2018-04-15 13:00:15

标签: python django django-models

models.py

class Thread(models.Model):

    users = models.ManyToManyField(settings.AUTH_USER_MODEL, through="UserThread")

    @property
    def from_user(self, current_user):
        for u in self.users.all():
            if u.username != current_user.username:
                return u
            else:
                pass

我的应用包含1对1对话,我将此属性编码为返回线程的对方用户(例如我与之对话的人)。但是,当我尝试:

u = User.objects.get(pk=1)
t = Thread.objects.get(pk=1)
t.from_user(current_user=u)

我收到错误

  

TypeError:from_user()缺少1个必需的位置参数:   'CURRENT_USER'

2 个答案:

答案 0 :(得分:1)

属性不能接受参数。

但是没有理由把它变成财产。您将其称为常规方法。删除@property装饰器。

另请注意,您的代码效率很低。无需查询所有相关用户并进行迭代。如果您只想获得第一个不是current_user的用户,请直接执行:

return self.users.exclude(username=current_user.username).first()

答案 1 :(得分:1)

删除@propery装饰器

您可以致电t.from_user(u)