| @@ 9-33 (lines=25) @@ | ||
| 6 | from .fake_model import get_fake_model |
|
| 7 | ||
| 8 | ||
| 9 | def test_annotate_hstore_key_ref(): |
|
| 10 | """Tests whether annotating using a :see:HStoreRef expression |
|
| 11 | works correctly. |
|
| 12 | ||
| 13 | This allows you to select an individual hstore key.""" |
|
| 14 | ||
| 15 | model_fk = get_fake_model({ |
|
| 16 | 'title': HStoreField(), |
|
| 17 | }) |
|
| 18 | ||
| 19 | model = get_fake_model({ |
|
| 20 | 'fk': models.ForeignKey(model_fk, on_delete=models.CASCADE) |
|
| 21 | }) |
|
| 22 | ||
| 23 | fk = model_fk.objects.create(title={'en': 'english', 'ar': 'arabic'}) |
|
| 24 | model.objects.create(fk=fk) |
|
| 25 | ||
| 26 | queryset = ( |
|
| 27 | model.objects |
|
| 28 | .annotate(english_title=HStoreRef('fk__title', 'en')) |
|
| 29 | .values('english_title') |
|
| 30 | .first() |
|
| 31 | ) |
|
| 32 | ||
| 33 | assert queryset['english_title'] == 'english' |
|
| 34 | ||
| 35 | ||
| 36 | def test_hstore_f_ref(): |
|
| @@ 53-71 (lines=19) @@ | ||
| 50 | assert result[1] == modelobj.title['ar'] |
|
| 51 | ||
| 52 | ||
| 53 | @pytest.mark.xfail(reason='has to be fixed as part of issue #8') |
|
| 54 | def test_values_hstore_key_through_fk(): |
|
| 55 | """Tests whether selecting a single key from a :see:HStoreField |
|
| 56 | using the query set's .values() works properly when there's a |
|
| 57 | foreign key relationship involved.""" |
|
| 58 | ||
| 59 | fmodel = get_fake_model({ |
|
| 60 | 'name': HStoreField() |
|
| 61 | }) |
|
| 62 | ||
| 63 | model = get_fake_model({ |
|
| 64 | 'fk': models.ForeignKey(fmodel, on_delete=models.CASCADE) |
|
| 65 | }) |
|
| 66 | ||
| 67 | fobj = fmodel.objects.create(name={'en': 'swen', 'ar': 'arabic swen'}) |
|
| 68 | model.objects.create(fk=fobj) |
|
| 69 | ||
| 70 | result = list(model.objects.values('fk__name__ar'))[0] |
|
| 71 | assert result['fk__name__ar'] == fobj.name['ar'] |
|
| 72 | ||