صلة خارجية modelisation في جانغو
-
06-07-2019 - |
سؤال
ولدي الكثير لكثير من الجدول العلاقة مثال: بعض دتس في قاعدة التوصيل
وعلى النسخة الأساسية من طراز بي تبدو مثل:
class FooLine(models.Model):
name = models.CharField(max_length=255)
class FooCol(models.Model):
name = models.CharField(max_length=255)
class FooVal(models.Model):
value = models.CharField(max_length=255)
line = models.ForeignKey(FooLine)
col = models.ForeignKey(FooCol)
وأنا أحاول أن بحث كل القيم للحصول على خط معين مع لاغية إذا كانت القيمة غير موجودة (أساسا أنا أحاول لعرض الجدول fooval مع القيم الخالية للقيم التي لم يتم شغلها) فإن مزود نموذجي يكون
SELECT value FROM FooCol LEFT OUTER JOIN
(FooVal JOIN FooLine
ON FooVal.line_id == FooLine.id AND FooLine.name = "FIXME")
ON FooCol.id = col_id;
هل هناك أي طريقة لmodelise فوق الاستعلام باستخدام نموذج جانغو
والشكر
المحلول
وينضم يمكن الاطلاع الخارجي كما الإختراق لأن SQL يفتقر إلى "الملاحة".
ما عليك هو بسيط وضعا إذا-بيان.
for line in someRangeOfLines:
for col in someRangeOfCols:
try:
cell= FooVal.objects().get( col = col, line = line )
except FooVal.DoesNotExist:
cell= None
وهذا ما وصلة خارجية حقا - محاولة بحث مع استبدال NULL
ووالتحسين الوحيد هو شيء من هذا القبيل ما يلي.
matrix = {}
for f in FooVal.objects().all():
matrix[(f.line,f.col)] = f
for line in someRangeOfLines:
for col in someRangeOfCols:
cell= matrix.get((line,col),None)
لا تنتمي إلى StackOverflow