伙计们! 我得到了下表,并希望从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文件,而不仅仅是对象?
感谢您的帮助,我真的想了解更多!
答案 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)