Django - Сериализация списка первичных ключей для атрибута ManyToMany?
У меня есть тест, который генерирует список категорий целей, которые являются первичным ключом, затем он заполняет модель, описанную ниже. Когда он переходит к UserInterestViews, если я передаю список goal_category_list, я получаю ошибку, что они не являются действительными PK, но когда я просто передаю 1 строку, все в порядке. Как передать список первичных ключей для поля ManyToManyField в сериализаторе?
test
import json
from django.urls import reverse
from django.test import TestCase
from rest_framework import status
from cheers.models import GoalCategory
from dummy_factory.Factories import UserFactory
class UserInterestsTest(TestCase):
@classmethod
# Generates Test DB data to persist throughout all tests
def setUpTestData(cls) -> None:
cls.goal_category_list = ['health', 'fitness', 'academic', 'spiritual']
for gc in cls.goal_category_list:
GoalCategory.objects.create(category=gc, emoji_url='some_url')
cls.user = UserFactory()
def test_create(self):
response = self.client.post(reverse('set_user_interests'),
data=json.dumps({'user': str(self.user.uuid),
'categories': self.goal_category_list}),
content_type='application/json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
view.py
class UserInterestsView(APIView):
"""
View for UserInterests object
* requires token authentication
"""
# Create user interests
@swagger_auto_schema(
request_body=UserInterestsSerializer,
operation_description="Create user interests object"
)
def post(self, request):
serializer = UserInterestsSerializer(data=request.data)
if serializer.is_valid():
try:
serializer.save()
except django.db.utils.InternalError as e:
return Response(dict(error=e), status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
model.py
class UserInterests(AbstractBaseModel):
user = models.OneToOneField(User, on_delete=models.CASCADE)
categories = models.ForeignKey(GoalCategory, on_delete=models.CASCADE)
Удаление categories = GoalCategorySerializer(many=True)
из сериализатора, похоже, помогло.
class UserInterestsSerializer(serializers.ModelSerializer):
categories = GoalCategorySerializer(many=True)
class Meta:
model = UserInterests
fields = ('user', 'categories', 'uuid')