【问题标题】:Writing django queries编写 Django 查询
【发布时间】:2018-02-27 01:19:16
【问题描述】:

我是 django 世界的新手,我正在尝试在 django 上运行以下 sql 查询。 非常感谢任何有关如何在 django 中编写以下等效查询的线索。

型号:

class UserTraining(models.Model):
    Training = models.CharField(max_length = 100,unique=True)
    Category = models.CharField(max_length = 100)
    Due_date = models.DateField(default=None)

    def __str__ (self):
        return self.Training + " " + self.Category


class UserSummary(models.Model):
    Users = models.ForeignKey(settings.AUTH_USER_MODEL)    
    Status = models.CharField(max_length = 100)
    Duedate = models.DateField(default=None)
    CompletedDate = models.DateField(default=None)
    Hours = models.IntegerField(default=0)
    Trainings = models.ForeignKey(UserTraining,to_field='Training',blank=False,null=True)

    def __str__(self):
        return  self.Status

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    user_category = models.CharField(max_length = 100, blank=True, null=True)
    mobile = models.CharField(max_length=256, blank=True, null=True)
    DOJ = models.DateField(default=None)


    def __str__(self):
        return  self.user.first_name + " " + self.user_category

工作sql查询:

Select UT. Training , ifnull (US.Status ,'Pending')
from SkillTracker_usertraining UT 
     Left outer join SkillTracker_usersummary US
         On US.Trainings_id=UT.Training and Us.Users_id='4'
where UT.Category='EMEIA' 

在 django 中编写上述 sql 查询时需要帮助。

我的目标是获取他所有类别的用户培训状态,如果他还没有参加培训,它应该显示为待定。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    试试看:

    UserTraining.objects.filter(
        usersummary__Users__id=4
        ).values('Training', 'usersummary__Status')
    

    其中usersummaryUserSummary 模型类名称的小写,我不添加ifnull,因为您的状态不是空字段。双下划线用于相关对象或特殊条件,如__gt__in 等。

    请阅读django coding-style,您的代码不适合其他开发人员

    【讨论】:

    • 我是开发世界的新手,我肯定会经历编码风格。我也尝试过,但该查询的响应是用户参加的培训的状态。假设 EMEIA 类别有 3 次培训,并且用户也来自 EMEIA,那么他必须参加 3 次培训,但如果他只参加了 3 次中的 2 次,那么在上述查询状态的情况下,将不会显示第 3 次培训的状态。但我希望第三个结果显示为待处理,因为用户尚未参加。
    猜你喜欢
    • 2013-12-26
    • 2019-07-30
    • 2017-12-22
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2018-10-08
    • 2014-12-29
    相关资源
    最近更新 更多