- У меня есть два класса: Website и WordpressWebsite.
- WordpressWebsite подклассы Website.
Когда экземпляр WordpressWebsite кодируется в JSON, присутствуют только атрибуты WordpressWebsite (и ни один из атрибутов Website).
Моя цель - написать собственный кодер, который вместо этого будет кодировать WordpressWebsite как веб-сайт.
Это то, что я имею до сих пор:
from django.core.serializers.json import DjangoJSONEncoder
from websites.models import Website
class WebsiteEncoder(DjangoJSONEncoder):
def default(self, obj):
raise Exception() # TEST
if isinstance(obj, Website) and hasattr(obj, 'website_ptr'):
return super().default(obj.website_ptr)
return super().default(obj)
У меня есть следующий контрольный пример:
from django.core import serializers
from django.test import TestCase
from websites.models.wordpress import WordpressWebsite
from websites.serialize import WebsiteEncoder
class SerializationTest(TestCase):
def setUp(self):
self.wordpress = WordpressWebsite.objects.create(
domain='test.com'
)
def test_foo(self):
JSONSerializer = serializers.get_serializer("json")
json_serializer = JSONSerializer()
json_serializer.serialize(
WordpressWebsite.objects.all(),
cls=WebsiteEncoder
)
data = json_serializer.getvalue()
print(data)
Этот тестовый пример работает нормально. Это не вызывает исключения.
Кто-нибудь знает, почему WebsiteEncoder.default не вызывается?