Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit53e1a2f

Browse files
author
Carlton Gibson
committed
Merge pull request#2637 from mdentremont/topic/allow-serialize-unsaved-with-relations
Support serializing unsaved models with related fields.
2 parents0e21f1c +fb58ef0 commit53e1a2f

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

‎rest_framework/relations.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,10 @@ def to_internal_value(self, data):
360360
]
361361

362362
defget_attribute(self,instance):
363+
# Can't have any relationships if not created
364+
ifnotinstance.pk:
365+
return []
366+
363367
relationship=get_attribute(instance,self.source_attrs)
364368
returnrelationship.all()if (hasattr(relationship,'all'))elserelationship
365369

‎tests/test_relations_pk.py‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,16 @@ def test_many_to_many_create(self):
143143
]
144144
self.assertEqual(serializer.data,expected)
145145

146+
deftest_many_to_many_unsaved(self):
147+
source=ManyToManySource(name='source-unsaved')
148+
149+
serializer=ManyToManySourceSerializer(source)
150+
151+
expected= {'id':None,'name':'source-unsaved','targets': []}
152+
# no query if source hasn't been created yet
153+
withself.assertNumQueries(0):
154+
self.assertEqual(serializer.data,expected)
155+
146156
deftest_reverse_many_to_many_create(self):
147157
data= {'id':4,'name':'target-4','sources': [1,3]}
148158
serializer=ManyToManyTargetSerializer(data=data)
@@ -296,6 +306,16 @@ def test_foreign_key_update_with_invalid_null(self):
296306
self.assertFalse(serializer.is_valid())
297307
self.assertEqual(serializer.errors, {'target': ['This field may not be null.']})
298308

309+
deftest_foreign_key_with_unsaved(self):
310+
source=ForeignKeySource(name='source-unsaved')
311+
expected= {'id':None,'name':'source-unsaved','target':None}
312+
313+
serializer=ForeignKeySourceSerializer(source)
314+
315+
# no query if source hasn't been created yet
316+
withself.assertNumQueries(0):
317+
self.assertEqual(serializer.data,expected)
318+
299319
deftest_foreign_key_with_empty(self):
300320
"""
301321
Regression test for #1072

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp