【问题标题】:How can I access foreign keys in Django?如何在 Django 中访问外键?
【发布时间】:2020-03-15 01:01:46
【问题描述】:

伙计们!

我有以下代码:

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 的事情,但它并没有真正起作用。

感谢您的热心帮助!

【问题讨论】:

  • 请添加您已经尝试过但不起作用的内容!
  • 我没有代码了,对不起!

标签: python sql django database foreign-keys


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 2015-04-25
    • 2021-08-03
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2013-06-01
    • 2019-06-01
    • 2013-06-08
    • 2020-01-31
    相关资源
    最近更新 更多