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'
答案 0 :(得分:1)
属性不能接受参数。
但是没有理由把它变成财产。您将其称为常规方法。删除@property装饰器。
另请注意,您的代码效率很低。无需查询所有相关用户并进行迭代。如果您只想获得第一个不是current_user的用户,请直接执行:
return self.users.exclude(username=current_user.username).first()
答案 1 :(得分:1)
删除@propery装饰器
您可以致电t.from_user(u)