update fields argument when given #1172
This commit is contained in:
parent
b705f5b743
commit
aa5510531d
@ -1260,7 +1260,11 @@ class CachedReferenceField(BaseField):
|
|||||||
if value.pk is None:
|
if value.pk is None:
|
||||||
self.error('You can only reference documents once they have'
|
self.error('You can only reference documents once they have'
|
||||||
' been saved to the database')
|
' been saved to the database')
|
||||||
return {'_id': value.pk}
|
value_dict = {'_id': value.pk}
|
||||||
|
for field in self.fields:
|
||||||
|
value_dict.update({field: value[field]})
|
||||||
|
|
||||||
|
return value_dict
|
||||||
|
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@ -4379,6 +4379,51 @@ class CachedReferenceFieldTest(MongoDBTestCase):
|
|||||||
self.assertEqual(SocialData.objects(person__group=g2).count(), 1)
|
self.assertEqual(SocialData.objects(person__group=g2).count(), 1)
|
||||||
self.assertEqual(SocialData.objects(person__group=g2).first(), s2)
|
self.assertEqual(SocialData.objects(person__group=g2).first(), s2)
|
||||||
|
|
||||||
|
def test_cached_reference_field_push_with_fields(self):
|
||||||
|
class Product(Document):
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
Product.drop_collection()
|
||||||
|
|
||||||
|
class Basket(Document):
|
||||||
|
products = ListField(CachedReferenceField(Product, fields=['name']))
|
||||||
|
|
||||||
|
Basket.drop_collection()
|
||||||
|
product1 = Product(name='abc').save()
|
||||||
|
product2 = Product(name='def').save()
|
||||||
|
basket = Basket(products=[product1]).save()
|
||||||
|
self.assertEqual(
|
||||||
|
Basket.objects._collection.find_one(),
|
||||||
|
{
|
||||||
|
'_id': basket.pk,
|
||||||
|
'products': [
|
||||||
|
{
|
||||||
|
'_id': product1.pk,
|
||||||
|
'name': product1.name
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# push to list
|
||||||
|
basket.update(push__products=product2)
|
||||||
|
basket.reload()
|
||||||
|
self.assertEqual(
|
||||||
|
Basket.objects._collection.find_one(),
|
||||||
|
{
|
||||||
|
'_id': basket.pk,
|
||||||
|
'products': [
|
||||||
|
{
|
||||||
|
'_id': product1.pk,
|
||||||
|
'name': product1.name
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'_id': product2.pk,
|
||||||
|
'name': product2.name
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
def test_cached_reference_field_update_all(self):
|
def test_cached_reference_field_update_all(self):
|
||||||
class Person(Document):
|
class Person(Document):
|
||||||
TYPES = (
|
TYPES = (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user