首页 > 解决方案 > 如何在 Django 中访问外键?

问题描述

伙计们!

我有以下代码:

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)
    picture_of_model = models.ForeignKey('Pictures', on_delete=models.CASCADE, null=True)

class Pictures(models.Model):
    id = models.AutoField(primary_key=True)
    picture = models.ImageField(upload_to='models/pictures', null=True)
    model_id = models.ForeignKey('Model3D', on_delete=models.CASCADE)

如您所见,Model3D 与自身具有外键关系,因为 3DModel 可以由例如三个其他 3DModel 部分组成。因此,再次引用 Model3D 的字段“部分”。每个 Model3D 对象在 Pictures 类中都有图片。

我的问题:

如何获得 Model3D 对象及其所有部分模型?如何获取 Model3D 对象的所有图片及其部分模型的所有图片?

我尝试了很多关于 select_related 的事情,但它并没有真正起作用。

谢谢你的热心帮助!

标签: pythonsqldjangodatabaseforeign-keys

解决方案


要获取所有嵌套模型的图片:

first_model_3d = Model3D.objects.get(id=model_id)
pictures = []
while first_model_3d.part_of:
    pictures.extend([picture for picture in Picture.objects.filter(model_id=first_model_3d)])
    first_model_3d = first_model_3d.part_of
print(pictures)

从图片中获取嵌套模型:

picture = Picture.objects.get(id=picture_id)
model_3d = picture.model_id
model_3d_list = []
while model_3d:
    model_3d_list = model_3d
    model_3d = model_3d.part_of
print(model_3d_list)

推荐阅读