/** Test eager loading of foreign keys. */ void tst_QDjangoModel::selectRelated() { // load fixtures { Item *item1 = new Item; item1->setName("first"); QCOMPARE(item1->save(), true); Item *item2 = new Item; item2->setName("second"); QCOMPARE(item2->save(), true); Owner owner; owner.setName("owner"); owner.setItem1(item1); owner.setItem2(item2); QCOMPARE(owner.save(), true); } // without eager loading QDjangoQuerySet<Owner> qs; Owner *owner = qs.get(QDjangoWhere("name", QDjangoWhere::Equals, "owner")); QVERIFY(owner != 0); QCOMPARE(owner->item1()->name(), QLatin1String("first")); QCOMPARE(owner->item2()->name(), QLatin1String("second")); delete owner; // with eager loading owner = qs.selectRelated().get(QDjangoWhere("name", QDjangoWhere::Equals, "owner")); QVERIFY(owner != 0); QCOMPARE(owner->item1()->name(), QLatin1String("first")); QCOMPARE(owner->item2()->name(), QLatin1String("second")); delete owner; }
/** Perform filtering on foreign keys. */ void tst_QDjangoModel::filterRelated() { // load fixtures { Item *item1 = new Item; item1->setName("first"); QCOMPARE(item1->save(), true); Item *item2 = new Item; item2->setName("second"); QCOMPARE(item2->save(), true); Owner owner; owner.setName("owner"); owner.setItem1(item1); owner.setItem2(item2); QCOMPARE(owner.save(), true); } // perform filtering QDjangoQuerySet<Owner> owners; QDjangoQuerySet<Owner> qs = owners.filter( QDjangoWhere("item1__name", QDjangoWhere::Equals, "first")); CHECKWHERE(qs.where(), QLatin1String("T0.\"name\" = ?"), QVariantList() << "first"); QCOMPARE(qs.count(), 1); QCOMPARE(qs.size(), 1); Owner *owner = qs.at(0); QVERIFY(owner != 0); QCOMPARE(owner->name(), QLatin1String("owner")); delete owner; }