编写django查询

时间:2017-09-18 13:21:20

标签: django django-models

我是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查询需要帮助。

我的目标背后是如果他尚未参加培训,则可以获得所有类别的用户培训状态,并将其显示为待处理状态。

1 个答案:

答案 0 :(得分:0)

试一试:

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

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

请阅读django coding-style,您的代码对其他开发者不利