繁体   English   中英

Django 遍历外键

[英]Django Traverse Foreign Keys

我有 3 个模型,我正在尝试创建一个仪表板,其中包含一个试验列表,该列表跨越通过过滤器选择的特定客户端的所有客户端会话。

以下是模型:

class Trial(models.Model):
    behavior_name = models.ForeignKey(Behavior, on_delete=models.CASCADE)
    client_session = models.ForeignKey(Client_Session, on_delete=models.CASCADE)
    frequency_input = models.PositiveIntegerField(default=0, blank=True)
    duration_input = models.DurationField(blank=True, default=timedelta(minutes=0))


    class Meta:
        verbose_name_plural = 'trials'

    def __str__(self):
        return str(self.id)


class Client_Session(models.Model):
    name = models.CharField(max_length=200, null=False)
    session_date = models.DateField(blank=False,null=False)
    client = models.ForeignKey(Client, on_delete=models.CASCADE)
    behaviors = models.ManyToManyField(Behavior, null=False)
    therapist = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

    class Meta:
        verbose_name_plural = 'clientsessions'

    def __str__(self):
        return self.name



class Client(models.Model):
    #user = models.ForeignKey(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    date_of_birth = models.DateField(blank=True, null=True)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICES,blank=True)
    gaurdian_first_name = models.CharField(max_length=200, blank=True)
    gaurdian_last_name = models.CharField(max_length=200, blank=True)
    diagnosis = models.CharField(max_length=200, choices=DIAGNOSIS_CHOICES, blank=True)
    therapist = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

    def __str__(self):
        return self.last_name

这是我试图创建的视图

def dashboard(request):
    # filter list of client sessions by selected client
    client_sessions = Client_Session.objects.filter(therapist=request.user)
    client = DashboardClientFilter(request.GET, queryset=client_sessions)
    client_sessions = client.qs

    #Create list of Trials across Client Sessions for the filtered client
        trial_list = Trial.objects.filter(client_session__client=client)

您有一个错误过滤查询,您使用了过滤数据。 预期是查询集。

更改,trial_list = Trial.objects.filter(client_session__client=client) 成

trial_list = Trial.objects.filter(client_session__client__in= client_sessions)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM