小编Ros*_*ote的帖子

django-rest-framework的非用户群TokenAuthentication

我正在尝试使用令牌身份验证创建一个api.我的问题是我不希望令牌与用户帐户相关联,而是与帐户模型相关联.

例如:

class Account(models.Model):
    slug =      models.SlugField()
    name =      models.CharField(max_length=255)
    website =   models.URLField(blank=True, default='')
    members =   models.ManyToManyField(User, through='AccountMember')

class AccountMember(models.Model):
    ADMIN       = 1
    MANAGER     = 2
    MEMBER      = 3
    ROLES = (
        (ADMIN,     'administrator'),
        (MANAGER,   'manager'),
        (MEMBER,    'member'),
    )
    user =          models.ForeignKey(User)
    account =       models.ForeignKey(Account)
    role =          models.PositiveSmallIntegerField(choices=ROLES)
    date_joined =   models.DateField(auto_now_add=True)

class Token(models.Model):
    """
    The default authorization token model.
    """
    key = models.CharField(max_length=40, primary_key=True)
    account = models.ForeignKey(Account, related_name='auth_tokens')
    only_allowed_ips = models.BooleanField(default=False)
    ip_list = models.TextField(default='', blank=True)
    created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

如您所见,有多个用户与一个帐户关联,因此将令牌分配给他们将是无用的.

我还希望能够为帐户添加多个令牌. …

authentication django permissions api-key django-rest-framework

7
推荐指数
1
解决办法
612
查看次数

Django查询集过滤器 - Q()| VS __in

有什么区别

queryset.filter(Q(foo='bar') | Q(foo='baz'))
Run Code Online (Sandbox Code Playgroud)

queryset.filter(foo__in=['bar', 'baz'])
Run Code Online (Sandbox Code Playgroud)

我发现有时他们会产生不同的结果,我无法弄清楚为什么.

我对这些查询得到了不同的结果:

In [8]: Profile.objects.filter(image="").count()
Out[8]: 7173

In [9]: Profile.objects.filter(image=None).count()
Out[9]: 25946

In [10]: Profile.objects.filter(image__in=["", None]).count()
Out[10]: 7173

In [11]: Profile.objects.filter(Q(image="") | Q(image=None)).count()
Out[11]: 33119
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL作为我的数据库引擎.

django filter django-orm django-queryset django-q

6
推荐指数
1
解决办法
5185
查看次数

Typescript:将继承的类名作为参数传递给函数

我有以下代码(简化):

class Component {

}

class CameraComponent extends Component {
    foo: number;

    constructor(bar: number) {
        super()
    }
}

function doSomething(klass: typeof Component) {

}

doSomething(CameraComponent);
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

TS2345: Argument of type 'typeof CameraComponent' is not assignable to parameter of type 'typeof Component'.

如果我修改CameraComponent为它工作正常:

class CameraComponent extends Component {
    foo: number;

    constructor() {
        super()
    }
}
Run Code Online (Sandbox Code Playgroud)

我有什么遗漏的吗?为什么不能更改构造函数签名?有什么方法可以让我在不求助的情况下完成这项工作吗any

inheritance constructor class typescript

5
推荐指数
1
解决办法
1643
查看次数

django 模型的假反向关系

我有以下代码:

class Transaction(models.Model):
    pass

class Shipment(models.Model):
    tx = models.ForeignKey(Transaction)
    sub = models.ForeignKey(Subscription)


class Subscription(models.Model):
    pass
Run Code Online (Sandbox Code Playgroud)

我正在尝试在订阅和交易之间建立反向关系,如下所示:

subscription.transaction_set.all()
Run Code Online (Sandbox Code Playgroud)

我能想出的唯一方法是使用这样的假属性:

class Subscription(models.Model):

    @property
    def transaction_set(self):
        return Transaction.objects.filter(
            pk__in=[s.tx.pk for s in self.shipment_set.all()]
        )
Run Code Online (Sandbox Code Playgroud)

但是现在我遇到了管理问题。我想在管理站点中使用 admin.TabularInline 列出交易。这是我的解决方案崩溃的地方。有谁有想法吗?

我还需要使用 admin.TabularInline 列出货件。

django orm reverse foreign-key-relationship

2
推荐指数
1
解决办法
537
查看次数