问题描述
我的商业模式如下:
class Business(models.Model):
class Meta:
verbose_name_plural = "Businesses"
name = models.CharField(max_length=60,null=False,verbose_name="Title")
about = models.TextField(max_length=5000,null=True,verbose_name="Description",blank=True)
upVote = models.ManyToManyField(Account,verbose_name="UpVote Count",blank=True)
Account 模型如下:
class Account(models.Model):
CHOICES = [('Male','Male'),Female','Female'),]
class Meta:
verbose_name_plural = "Accounts"
name = models.CharField(max_length=60,verbose_name="Title")
gender= models.CharField(max_length=6,verbose_name="Gender",choices=CHOICES)
我如何实现这一目标?
到目前为止,我已经实现了按赞数排序。
Business.objects.all().order_by("upVote")
解决方法
您可以使用带有 Sum
function [Django docs] 的 Conditional Expression [Django docs] 来注释您将要根据其排序的值:
from django.db.models import Case,Sum,Value,When
Business.objects.annotate(
order_value=Sum(
Case(
When(upvote__gender='Male',then=Value(1)),When(upvote__gender='Female',then=Value(-1)),default=Value(0)
)
)
).order_by('order_value')
上面的查询会给你 Business
对象,先是女性,然后是男性,你可以通过写 .order_by('-order_value')
来颠倒顺序。
您可以通过双下划线访问相关模型的字段。请参阅文档 here。
试试:
return list1.stream()
.flatMap(x -> list2.stream().map(y -> func.apply(x,y)));