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!
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)
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.