Faceci!

Mam następujący kod:

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)

Jak widać, Model3D ma związek z kluczem obcym, ponieważ model 3D może składać się np. trzy inne części 3DModel. Dlatego pole „część”, które ponownie odnosi się do Model3D. Każdy obiekt Model3D ma obrazy w klasie Pictures.

Moje pytania:

Jak uzyskać obiekt Model3D ze wszystkimi modelami części? Jak uzyskać wszystkie zdjęcia obiektu Model3D i wszystkie zdjęcia jego części Models?

Próbowałem wielu rzeczy dotyczących select_related, ale tak naprawdę to nie działa.

Dziękuję za życzliwą pomoc!

0
Heart_Hacker 19 listopad 2019, 16:29
Dodaj to, co już wypróbowałeś i nie zadziałało!
 – 
Kshitij Saxena
19 listopad 2019, 16:33
Nie mam już kodu, przepraszam!
 – 
Heart_Hacker
19 listopad 2019, 16:38

1 odpowiedź

Aby uzyskać zdjęcia wszystkich modeli zagnieżdżonych:

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)

Aby pobrać zagnieżdżone modele z obrazu:

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)
0
Kshitij Saxena 19 listopad 2019, 16:47