I have 3 models and I am trying to create a dashboard with a list of Trials that spans all Client Sessions for a specific client chosen via a filter.
Here are the models:
JavaScript
x
43
43
1
class Trial(models.Model):
2
behavior_name = models.ForeignKey(Behavior, on_delete=models.CASCADE)
3
client_session = models.ForeignKey(Client_Session, on_delete=models.CASCADE)
4
frequency_input = models.PositiveIntegerField(default=0, blank=True)
5
duration_input = models.DurationField(blank=True, default=timedelta(minutes=0))
6
7
8
class Meta:
9
verbose_name_plural = 'trials'
10
11
def __str__(self):
12
return str(self.id)
13
14
15
class Client_Session(models.Model):
16
name = models.CharField(max_length=200, null=False)
17
session_date = models.DateField(blank=False,null=False)
18
client = models.ForeignKey(Client, on_delete=models.CASCADE)
19
behaviors = models.ManyToManyField(Behavior, null=False)
20
therapist = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
21
22
class Meta:
23
verbose_name_plural = 'clientsessions'
24
25
def __str__(self):
26
return self.name
27
28
29
30
class Client(models.Model):
31
#user = models.ForeignKey(User, on_delete=models.CASCADE)
32
first_name = models.CharField(max_length=200)
33
last_name = models.CharField(max_length=200)
34
date_of_birth = models.DateField(blank=True, null=True)
35
gender = models.CharField(max_length=10, choices=GENDER_CHOICES,blank=True)
36
gaurdian_first_name = models.CharField(max_length=200, blank=True)
37
gaurdian_last_name = models.CharField(max_length=200, blank=True)
38
diagnosis = models.CharField(max_length=200, choices=DIAGNOSIS_CHOICES, blank=True)
39
therapist = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
40
41
def __str__(self):
42
return self.last_name
43
Here is the view that im trying to create
JavaScript
1
10
10
1
def dashboard(request):
2
# filter list of client sessions by selected client
3
client_sessions = Client_Session.objects.filter(therapist=request.user)
4
client = DashboardClientFilter(request.GET, queryset=client_sessions)
5
client_sessions = client.qs
6
7
#Create list of Trials across Client Sessions for the filtered client
8
trial_list = Trial.objects.filter(client_session__client=client)
9
10
Advertisement
Answer
You have an error filter query you used Filter data. Expected is queryset.
Change, trial_list = Trial.objects.filter(client_session__client=client) into
JavaScript
1
4
1
client_sessions = client.qs
2
client_pks = client.qs.values_list('client_id',flat=True)
3
trial_list = Trial.objects.filter(client_session__client_id__in= list(client_pks))
4
trial_list = Trial.objects.filter(client_session__client__in= list(client_pks)).distinct()
distinct() method is used to remove duplicated but it not work some databases