Return 基于 In Query 的不同订单
Return a distinct order based on In Query
我有一个 queryset
,我想根据 in
过滤器中的值 return 相应的顺序。以下是我给出的语法和模型
型号
class Transaction(models.Model):
user = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True)
comments = models.TextField(null=True, blank=True)
class Profile(models.Model):
user = models.OneToOneField(User,
null=True,
blank=True,
related_name='profile',
on_delete=models.SET_NULL)
first_name = models.CharField(max_length=125, null=True, blank=True)
middle_name = models.CharField(max_length=125, null=True, blank=True)
last_name = models.CharField(max_length=125, null=True, blank=True)
nickname = models.CharField(max_length=100, null=True, blank=True)
balance = models.DecimalField(default=0.0, max_digits=7, decimal_places=2)
is_online = models.BooleanField(default=False)
语法
from trading.models import Transaction
ids = [4, 1, 3, 2]
tx = Transaction.objects.filter(user_id__in=ids).order_by('user').distinct('user')
我希望 Transaction 对象的 returned 顺序基于 id 列表的 id 顺序
我遇到了同样的问题,我是如何解决的 it.this 如果你使用 Django >= 1.8
就可以了
from django.db.models import Case, When
from trading.models import Transaction
ids = [4, 1, 3, 2]
myorder = Case(*[When(user_id=id, then=pos) for pos, id in enumerate(ids)])
txt = Transaction.objects.filter(user_id__in=ids).order_by(myorder)
上面已经有一个很好的答案,但我仍然想分享我的答案,我在 Python 应用程序级别做到了。上面的答案看起来更好。请注意,这适用于 Django Rest Framework
ids = [4, 2, 3, 1]
transactions = Transaction.objects.filter(user_id__in=ids).order_by('user').distinct('user')
reorder_basis = {transaction.user_id: transaction for transaction in transactions}
reordered_transactions = [reorder_basis.get(_id) for _id in ids]
我有一个 queryset
,我想根据 in
过滤器中的值 return 相应的顺序。以下是我给出的语法和模型
型号
class Transaction(models.Model):
user = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True)
comments = models.TextField(null=True, blank=True)
class Profile(models.Model):
user = models.OneToOneField(User,
null=True,
blank=True,
related_name='profile',
on_delete=models.SET_NULL)
first_name = models.CharField(max_length=125, null=True, blank=True)
middle_name = models.CharField(max_length=125, null=True, blank=True)
last_name = models.CharField(max_length=125, null=True, blank=True)
nickname = models.CharField(max_length=100, null=True, blank=True)
balance = models.DecimalField(default=0.0, max_digits=7, decimal_places=2)
is_online = models.BooleanField(default=False)
语法
from trading.models import Transaction
ids = [4, 1, 3, 2]
tx = Transaction.objects.filter(user_id__in=ids).order_by('user').distinct('user')
我希望 Transaction 对象的 returned 顺序基于 id 列表的 id 顺序
我遇到了同样的问题,我是如何解决的 it.this 如果你使用 Django >= 1.8
就可以了from django.db.models import Case, When
from trading.models import Transaction
ids = [4, 1, 3, 2]
myorder = Case(*[When(user_id=id, then=pos) for pos, id in enumerate(ids)])
txt = Transaction.objects.filter(user_id__in=ids).order_by(myorder)
上面已经有一个很好的答案,但我仍然想分享我的答案,我在 Python 应用程序级别做到了。上面的答案看起来更好。请注意,这适用于 Django Rest Framework
ids = [4, 2, 3, 1]
transactions = Transaction.objects.filter(user_id__in=ids).order_by('user').distinct('user')
reorder_basis = {transaction.user_id: transaction for transaction in transactions}
reordered_transactions = [reorder_basis.get(_id) for _id in ids]