我正在尝试使用令牌身份验证创建一个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
有什么区别
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作为我的数据库引擎.
我有以下代码(简化):
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?
我有以下代码:
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 ×3
api-key ×1
class ×1
constructor ×1
django-orm ×1
django-q ×1
filter ×1
inheritance ×1
orm ×1
permissions ×1
reverse ×1
typescript ×1