【问题标题】:Django model property: missing 1 required positional argument:Django 模型属性:缺少 1 个必需的位置参数:
【发布时间】:2018-04-15 13:00:15
【问题描述】:

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 个必需的位置参数: '当前用户'

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    属性不能接受参数。

    但没有理由将其设为属性。您将其称为正常方法。移除 @property 装饰器。

    另外请注意,您的代码效率很低。无需查询所有相关用户并遍历。如果你只想获取第一个不是 current_user 的用户,那么直接这样做:

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

    【讨论】:

      【解决方案2】:

      删除@propery 装饰器

      您可以拨打t.from_user(u)

      【讨论】:

        猜你喜欢
        • 2018-06-20
        • 2018-09-07
        • 2017-10-20
        • 1970-01-01
        • 2020-06-11
        • 1970-01-01
        • 2018-01-24
        • 2019-05-27
        • 2015-07-08
        相关资源
        最近更新 更多