mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-25 05:01:28 +03:00 
			
		
		
		
	Thanks to Jon Dufresne (@jdufresne) for review. Co-authored-by: Asif Saif Uddin <auvipy@gmail.com> Co-authored-by: Rizwan Mansuri <Rizwan@webbyfox.com>
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.test import TestCase
 | |
| 
 | |
| from rest_framework import serializers
 | |
| 
 | |
| from .models import Bookmark, Note, Tag
 | |
| 
 | |
| 
 | |
| class TestGenericRelations(TestCase):
 | |
|     def setUp(self):
 | |
|         self.bookmark = Bookmark.objects.create(url='https://www.djangoproject.com/')
 | |
|         Tag.objects.create(tagged_item=self.bookmark, tag='django')
 | |
|         Tag.objects.create(tagged_item=self.bookmark, tag='python')
 | |
|         self.note = Note.objects.create(text='Remember the milk')
 | |
|         Tag.objects.create(tagged_item=self.note, tag='reminder')
 | |
| 
 | |
|     def test_generic_relation(self):
 | |
|         """
 | |
|         Test a relationship that spans a GenericRelation field.
 | |
|         IE. A reverse generic relationship.
 | |
|         """
 | |
| 
 | |
|         class BookmarkSerializer(serializers.ModelSerializer):
 | |
|             tags = serializers.StringRelatedField(many=True)
 | |
| 
 | |
|             class Meta:
 | |
|                 model = Bookmark
 | |
|                 fields = ('tags', 'url')
 | |
| 
 | |
|         serializer = BookmarkSerializer(self.bookmark)
 | |
|         expected = {
 | |
|             'tags': ['django', 'python'],
 | |
|             'url': 'https://www.djangoproject.com/'
 | |
|         }
 | |
|         assert serializer.data == expected
 | |
| 
 | |
|     def test_generic_fk(self):
 | |
|         """
 | |
|         Test a relationship that spans a GenericForeignKey field.
 | |
|         IE. A forward generic relationship.
 | |
|         """
 | |
| 
 | |
|         class TagSerializer(serializers.ModelSerializer):
 | |
|             tagged_item = serializers.StringRelatedField()
 | |
| 
 | |
|             class Meta:
 | |
|                 model = Tag
 | |
|                 fields = ('tag', 'tagged_item')
 | |
| 
 | |
|         serializer = TagSerializer(Tag.objects.all(), many=True)
 | |
|         expected = [
 | |
|             {
 | |
|                 'tag': 'django',
 | |
|                 'tagged_item': 'Bookmark: https://www.djangoproject.com/'
 | |
|             },
 | |
|             {
 | |
|                 'tag': 'python',
 | |
|                 'tagged_item': 'Bookmark: https://www.djangoproject.com/'
 | |
|             },
 | |
|             {
 | |
|                 'tag': 'reminder',
 | |
|                 'tagged_item': 'Note: Remember the milk'
 | |
|             }
 | |
|         ]
 | |
|         assert serializer.data == expected
 |