python - 如何在 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 的事情,但它并没有真正起作用。
谢谢你的热心帮助!
解决方案
要获取所有嵌套模型的图片:
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)
推荐阅读
- mysql - Mysql按周末日期分组
- android - 如何根据片段更改回收视图中项目的外观?
- swift - Swift 4.2 中的快速数组比较
- android - 在项目级词典中添加拼写错误词
- c# - C# 和 Microsoft.Office.Interop.Excel 查找与给定单元格合并的所有单元格
- python - 未指定目录时,patch 不适用于 pytest
- amazon-sagemaker - Sagemaker 中的培训作业在将 S3 中的文件定位到 docker 映像路径时出错
- c - 如何使用 SDL_LockTexture() 更新脏矩形?
- android - Google Admob Android:仅在一台设备上工作
- xcode - 如何从 watchkit 中的按钮打开下一页(组页)