Django基于不相关模型中的字段进行排序
我在我的Django项目中有两个模型。第一个是UserProfile,第二个是Interests:
class UserProfile(models.Model):
user_model_for_profile = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
first_name = models.CharField(max_length = 25)
middle_name = models.CharField(max_length = 25)
last_name = models.CharField(max_length= 50)
gender = models.CharField(choices = gender_choices, max_length = 30)
profile_created_by = models.CharField(choices = profile_creation_choices, max_length = 30)
date_of_birth = models.DateField()
time_of_birth = models.TimeField()
Height = models.IntegerField()
#Day of birth needed?
Country_of_birth = models.CharField(choices = Countries_choices, max_length = 30)
State_of_birth = models.CharField(choices = State_choices, max_length = 40)
City_of_birth = models.CharField(max_length = 30)
Mobile_number = models.CharField(
max_length=10, # Adjust based on your needs
validators=[RegexValidator(regex=r'^[6-9]\d{9}$')],
unique = True
)
Password = models.CharField(max_length= 50)
Religion = models.CharField(choices = Religion_choices, max_length = 30)
Sub_community = models.CharField(choices = Sub_community_choices, max_length = 30)
Nukh = models.CharField(max_length = 30)
Verified = models.BooleanField(default = True)
class Interests(models.Model):
interest_sent_by = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='relationship5')
interested_in = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='relationship6')
我该如何基于Interests(特别是 if interested_in == request.user.id)对我的 UserProfile 对象进行排序?
我希望符合条件的个人资料排在最前面。
解决方案
from django.db.models import OuterRef, Exists
profiles = UserProfile.objects.annotate(
has_interest=Exists(
Interests.objects.filter(
interest_sent_by=OuterRef('user_model_for_profile'),
interested_in=request.user
)
)
).order_by('-has_interest')
OuterRef('user_model_for_profile') 是连接这两个模型的关键,它告诉Django将当前个人资料行中的用户与Interests表中的interest_sent_by进行匹配。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。