سؤال

ولدي الكثير لكثير من الجدول العلاقة مثال: بعض دتس في قاعدة التوصيل

وعلى النسخة الأساسية من طراز بي تبدو مثل:

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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top