Skip to content

Commit 0d46e58

Browse files
committed
Commit unit test
1 parent 61becb6 commit 0d46e58

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

tests/models.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from django.contrib.auth.models import User
44
from django.db import models
5+
from django.db.models import QuerySet
6+
from django.db.models.manager import BaseManager
57
from django.utils.translation import gettext_lazy as _
68

79

@@ -124,3 +126,27 @@ class OneToOnePKSource(RESTFrameworkModel):
124126
target = models.OneToOneField(
125127
OneToOneTarget, primary_key=True,
126128
related_name='required_source', on_delete=models.CASCADE)
129+
130+
131+
class CustomManagerModel(RESTFrameworkModel):
132+
class CustomManager:
133+
def __new__(cls, *args, **kwargs):
134+
cls = BaseManager.from_queryset(
135+
QuerySet
136+
)
137+
return cls
138+
139+
objects = CustomManager()()
140+
# `CustomManager()` will return a `BaseManager` class.
141+
# We need to instantiation it, so we write `CustomManager()()` here.
142+
143+
text = models.CharField(
144+
max_length=100,
145+
verbose_name=_("Text comes here"),
146+
help_text=_("Text description.")
147+
)
148+
149+
o2o_target = models.ForeignKey(OneToOneTarget,
150+
help_text='OneToOneTarget',
151+
verbose_name='OneToOneTarget',
152+
on_delete=models.CASCADE)

tests/test_serializer_lists.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
from rest_framework import serializers
88
from rest_framework.exceptions import ErrorDetail
9+
from tests.models import (
10+
CustomManagerModel,
11+
NullableOneToOneSource,
12+
OneToOneTarget
13+
)
914

1015

1116
class BasicObject:
@@ -683,3 +688,43 @@ def test_min_max_length_six_items(self):
683688
assert min_serializer.validated_data == input_data
684689

685690
assert not max_min_serializer.is_valid()
691+
692+
693+
@pytest.mark.django_db()
694+
class TestToRepresentationManagerCheck:
695+
"""
696+
https://github.com/encode/django-rest-framework/issues/8726
697+
"""
698+
699+
def setup(self):
700+
class CustomManagerModelSerializer(serializers.ModelSerializer):
701+
class Meta:
702+
model = CustomManagerModel
703+
fields = '__all__'
704+
705+
class OneToOneTargetSerializer(serializers.ModelSerializer):
706+
my_model = CustomManagerModelSerializer(many=True, source="custommanagermodel_set")
707+
708+
class Meta:
709+
model = OneToOneTarget
710+
fields = '__all__'
711+
depth = 3
712+
713+
class NullableOneToOneSourceSerializer(serializers.ModelSerializer):
714+
target = OneToOneTargetSerializer()
715+
716+
class Meta:
717+
model = NullableOneToOneSource
718+
fields = '__all__'
719+
720+
self.serializer = NullableOneToOneSourceSerializer
721+
722+
def test(self):
723+
o2o_target = OneToOneTarget.objects.create(name='OneToOneTarget')
724+
NullableOneToOneSource.objects.create(
725+
name='NullableOneToOneSource',
726+
target=o2o_target
727+
)
728+
queryset = NullableOneToOneSource.objects.all()
729+
serializer = self.serializer(queryset, many=True)
730+
assert serializer.data

0 commit comments

Comments
 (0)