【发布时间】:2017-04-04 11:47:41
【问题描述】:
我有以下型号:
class Employee(models.Model):
def getFullname(self):
return '{}, {} {}'.format(self.empLastname,self.empFirstname, self.empMiddlename)
empID = models.CharField(primary_key=True, max_length= 50, null=False)
empLastname = models.CharField(max_length=50)
empFirstname = models.CharField(max_length=50)
empMiddlename = models.CharField(max_length=50, null=True)
fullname = property(getFullname)
def __str__(self):
return self.fullname
class Picture(models.Model):
empID = models.ForeignKey(Employee, related_name="pictures", to_field='empID', on_delete = models.CASCADE)
picture = models.ImageField('Uploaded image')
isDef = models.BooleanField(default=False)
我想查询图片模型中isDefault=True 的所有员工。但并非所有员工都有照片。所以基本上我想查询isDefault=True的所有员工和所有没有图片的员工。
我的查询是这样的:
SELECT manager_employee.`*`, manager_picture.*
FROM manager_employee
LEFT JOIN manager_picture ON (manager_employee.empID = manager_picture.empID_id
AND manager_picture.isDef)
serializer.py
class PictureSerializer(serializers.ModelSerializer):
class Meta:
model = Picture
fields = (
'empID',
'picture',
'isDef'
)
class EmployeeListSerializer(serializers.ModelSerializer):
pictures = PictureSerializer(many = True, read_only = True)
class Meta:
model = Employee
fields = (
'empID',
'empLastname',
'empFirstname',
'empMiddlename',
'fullname',
'pictures'
)
这个查询给了我正确的结果.. 问题是如何在Django.. 中做到这一点。
假设我有 Employee 模型的记录
==================================================== ============================ 员工ID |雇员姓氏 | emp名字 | emp中间名 |全名 | ==================================================== ============================ 1 |能源部 |约翰 |史密斯 |能源部,约翰·史密斯 | -------------------------------------------------- -------------------------- 2 |波特 |哈利 |月亮 |波特,哈利..| -------------------------------------------------- -------------------------- 3 |啊啊艾伯 |加速器 | ... | -------------------------------------------------- -------------------------- 4 |咩| bbbb |密送| ... | -------------------------------------------------- --------------------------现在在图片模型中
================================================= 员工ID |图片 |定义 | ================================================= 1 | Pic1.jpg | 0 | ------------------------------------------------ 1 | Pic2.jpg | 0 | ------------------------------------------------ 1 | Pic3.jpg | 1 | *这使它成为默认值* ------------------------------------------------ 2 | emp2Pic1.jpg | 1 | *这使它成为默认值* ------------------------------------------------ 2 | emp2Pic2.jpg | 0 | ------------------------------------------------ 4 | emp4Pic1.jpg | 0 | ------------------------------------------------ 4 | emp4Pic2.jpg | 1 | *这使它成为默认值* ------------------------------------------------现在当我尝试这个 SQL 时:
SELECT manager_employee.`*`, manager_picture.*
FROM manager_employee
LEFT JOIN manager_picture ON (manager_employee.empID = manager_picture.empID_id
AND manager_picture.isDefault)
这给我一个结果:
==================================================== ======================== 员工ID |雇员姓氏 | emp名字 |工作中 |图片 |定义 | 1 |能源部 |约翰 |史密斯 | Pic2.jpg | 1 | 2 |波特 |哈利 |月亮 | emp2Pic1.jpg | 1 | 3 |啊啊艾伯 |加速器 | (空) | (空) | 4 |咩| bbbb |密送| emp4Pic2.jpg | 1 | -------------------------------------------------- ----------------------如何在 Django 中实现?
请有人帮助我..TIA..
【问题讨论】:
-
@PiyushS.Wanare 我检查了链接。但答案是 LEFT OUTER JOIN 而不是 LEFT JOIN。当我测试答案时,它什么也没给我..
-
Picture.objects.filter(isDefault=True,picture__isnull=True)这是您要找的吗?这将为您提供图片模型中 isDefault = True 且没有图片的所有员工。 -
BDW 你正在处理哪个数据库?
-
我刚刚编辑了我的邮递员,并包含了
serializer.py.. 也许我遇到了serializer.py的问题,但我只是不知道是什么.. 我已经尝试过@987654332 @ 但它给了我一个错误django.core.exceptions.FieldError: Cannot resolve keyword 'isDefault' into field. Choices are: empFirstname, empID, empLastname, empMiddlename, pictures.. 我正在使用MySQL
标签: python django django-models orm