def test_modeldict_instances(self): base_count = ModelDictModel.objects.count() mydict = ModelDict(ModelDictModel, key='key', value='value', instances=True) mydict['foo'] = ModelDictModel(key='foo', value='bar') assert isinstance(mydict['foo'], ModelDictModel) assert mydict['foo'].pk assert mydict['foo'].value == 'bar' assert ModelDictModel.objects.values_list( 'value', flat=True).get(key='foo') == 'bar' assert ModelDictModel.objects.count() == base_count + 1 old_pk = mydict['foo'].pk mydict['foo'] = ModelDictModel(key='foo', value='bar2') assert isinstance(mydict['foo'], ModelDictModel) assert mydict['foo'].pk == old_pk assert mydict['foo'].value == 'bar2' assert ModelDictModel.objects.values_list( 'value', flat=True).get(key='foo') == 'bar2' assert ModelDictModel.objects.count() == base_count + 1 # test deletion mydict['foo'].delete() assert 'foo' not in mydict
def test_setdefault_instances(self): mydict = ModelDict(ModelDictModel, key='key', value='value') with pytest.raises(KeyError): mydict['hello'] instance = ModelDictModel(key='hello', value='world') ret = mydict.setdefault('hello', instance) assert ret == 'world' assert mydict['hello'] == 'world' instance2 = ModelDictModel(key='hello', value='world2') ret = mydict.setdefault('hello', instance2) assert ret == 'world' assert mydict['hello'] == 'world'