I want to filter according to last added element of related model with foreignkey relationship field. I try a lot but can not achieve, My models like this
class Status(models.Model):
member= models.ForeignKey(Member, on_delete=models.CASCADE, related_name='member_status')
name = models.CharField(max_length=20, choices=("new","old","continue")
notes= models.CharField(max_length=200)
status_created_at = models.DateTimeField(auto_now_add=True)
class Member(models.Model):
messageContent= models.TextField(null=True, blank=True)
my queryset like this
{
"id": 1,
"member_status": [
{
"id": 8,
"name": "new",
"notes": "",
"status_created_at": "2021-01-01T17:55:21.523162Z",
"member": 1
},
{
"id": 9,
"name": "old",
"notes": "",
"status_created_at": "2022-08-09T17:56:06.995086Z",
"order": 1
}
],
"messageContent": "example",
},
"id": 1,
"member_status": [
{
"id": 11,
"name": "new",
"notes": "",
"status_created_at": "2021-01-01T17:55:21.523162Z",
"member": 1
},
{
"id": 12,
"name": "continue",
"notes": "",
"status_created_at": "2022-08-08T17:56:06.995086Z",
"order": 1
}
],
"messageContent": "example content",
}
for filtering with FilterSet
def filter_queryset(self, queryset):
queryset= Member.objects.filter(member_status__name=self.request.query_params.get('memberStatus'))
return super().filter_queryset(queryset)
I want to filter according to last member status but when filter with "new", all objects get with queryset. I want to get members filtered by last status.
Can you help me, please?
I can not find exact answer from web but this is enough for me now. I add this solution
def filter_queryset(self, queryset):
queryset = Status.objects.filter(id__in=Status.objects.values("member").annotate(max_id=Max('id')).values("max_id"),name=self.request.query_params.get('status'))
queryset = Member.objects.filter(member_status__in=queryset)
return super().filter_queryset(queryset)
this code script is very complex so I think may be anyone share a clear solution
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.