mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #20820 -- Model inheritance + m2m fixture loading regression
Tests by Tim Graham, report from jeroen.pulles@redslider.net.
This commit is contained in:
		
				
					committed by
					
						 Andrew Godwin
						Andrew Godwin
					
				
			
			
				
	
			
			
			
						parent
						
							ced3e6b17d
						
					
				
				
					commit
					f5552571dc
				
			| @@ -989,7 +989,16 @@ class ForeignObject(RelatedField): | ||||
|  | ||||
|     @staticmethod | ||||
|     def get_instance_value_for_fields(instance, fields): | ||||
|         return tuple([getattr(instance, field.attname) for field in fields]) | ||||
|         ret = [] | ||||
|         for field in fields: | ||||
|             # Gotcha: in some cases (like fixture loading) a model can have | ||||
|             # different values in parent_ptr_id and parent's id. So, use | ||||
|             # instance.pk (that is, parent_ptr_id) when asked for instance.id. | ||||
|             if field.primary_key: | ||||
|                 ret.append(instance.pk) | ||||
|             else: | ||||
|                 ret.append(getattr(instance, field.attname)) | ||||
|         return tuple(ret) | ||||
|  | ||||
|     def get_attname_column(self): | ||||
|         attname, column = super(ForeignObject, self).get_attname_column() | ||||
|   | ||||
							
								
								
									
										10
									
								
								tests/fixtures_regress/fixtures/special-article.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								tests/fixtures_regress/fixtures/special-article.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| [ | ||||
|     { | ||||
|         "pk": 1, | ||||
|         "model": "fixtures_regress.specialarticle", | ||||
|         "fields": { | ||||
|             "title": "Article Title 1", | ||||
|             "channels": [] | ||||
|         } | ||||
|     } | ||||
| ] | ||||
| @@ -70,6 +70,11 @@ class Article(models.Model): | ||||
|         ordering = ('id',) | ||||
|  | ||||
|  | ||||
| # Subclass of a model with a ManyToManyField for test_ticket_20820 | ||||
| class SpecialArticle(Article): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| # Models to regression test #11428 | ||||
| @python_2_unicode_compatible | ||||
| class Widget(models.Model): | ||||
|   | ||||
| @@ -444,6 +444,17 @@ class TestFixtures(TestCase): | ||||
|         self.assertTrue("No fixture 'this_fixture_doesnt_exist' in" in | ||||
|             force_text(stdout_output.getvalue())) | ||||
|  | ||||
|     def test_ticket_20820(self): | ||||
|         """ | ||||
|         Regression for ticket #20820 -- loaddata on a model that inherits | ||||
|         from a model with a M2M shouldn't blow up. | ||||
|         """ | ||||
|         management.call_command( | ||||
|             'loaddata', | ||||
|             'special-article.json', | ||||
|             verbosity=0, | ||||
|         ) | ||||
|  | ||||
|  | ||||
| class NaturalKeyFixtureTests(TestCase): | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user