如何通过Django中的外键连接从对象获取特定值?

时间:2019-11-18 00:00:16

标签: python django sqlite foreign-keys

伙计们! 我得到了下表,并希望从Model3D的对象中获取所有scad文件,其中的一部分不为null,并且具有与Model3D相同的ID。 Model3D是3D打印机对象,可能包含多个部分,因此具有“ part of”属性,该属性保存原始模型的ID。

class Model3D(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=300)
    description = models.CharField(max_length=500)
    original_Model = models.ForeignKey('Model3D', on_delete=models.CASCADE, null=True)
    creation_Date = models.DateTimeField(auto_now=True)
    stl_File = models.FileField(null=True, upload_to='models/stlFiles')
    scad_File = models.FileField(null=True, upload_to='models/scadFiles')
    parameter_id = models.ForeignKey('Parameter', on_delete=models.CASCADE, null=True)
    part_of = models.ForeignKey('Model3D', related_name="part_of_model3d", on_delete=models.CASCADE, null=True)

我尝试了以下操作:part_models_scad_files = Model3D.objects.filter(part_of__isnull=False).select_related(id=self.id)

但是我如何获取scad文件,而不仅仅是对象?

感谢您的帮助,我真的想了解更多!

2 个答案:

答案 0 :(得分:0)

您可能没有过滤“ select_related”,而是调用了相关的“字段名”,似乎不需要select_related,您可以简单地使用案例1

如果您要获取具有特定ID的结果,可以使用

案例1

part_models_scad_files = Model3D.objects.get(part_of__isnull=False, id = self.id)
print(part_models_scad_files.scad_file)

案例2(用于评估2个表)

part_models_scad_files = Model3D.objects.filter(part_of__isnull=False, id = self.id).select_related('part_of')
for entry in part_models_scad_files:
    print(entry.scad_file)

情况3(如果只需要scad_file的列表)

part_models_scad_files = Model3D.objects.filter(part_of__isnull=False, id = self.id).select_related('part_of').values_list('scad_file', flat = True)

答案 1 :(得分:0)

这里的诀窍是使用F-expression

part_models_scad_files = Model3D.objects.select_related('part_of').filter(part_of__isnull=False, id=F('id')).values_list('scad_File', flat=True)