【发布时间】:2020-12-18 03:09:02
【问题描述】:
从 Django 的单元测试中获取以下内容。似乎无法弄清楚发生这种情况的原因。
我的迁移看起来与我所做的其他迁移相同。
另外,我可以在本地机器的管理部分运行它,所以我的另一个问题是,如果它在测试期间发生,是否可以实时推送,这很重要。尝试在此处遵循最佳实践,因此感谢其他人对此的意见。
models.py
class LeadComplete(models.Model):
"""Complete lead info"""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.DO_NOTHING,
)
title=models.CharField(max_length=255)
time_minutes = models.IntegerField()
score = models.DecimalField(max_digits=5, decimal_places=2)
link = models.CharField(max_length=255, blank=True)
client = models.ManyToManyField('Client')
def __str__(self):
return self.title
序列化器.py
class LeadCompleteSerializer(serializers.ModelSerializer):
"""Serialize a leadComplete"""
client = serializers.PrimaryKeyRelatedField(
many=True,
queryset=Client.objects.all()
)
class Meta:
model = LeadComplete
fields = [
'id', 'title', 'time_minutes', 'score', 'link', 'client',
]
read_only_fields = ('id',)
views.py
class LeadCompleteViewSet(viewsets.ModelViewSet):
"""Manage LeadComplete in the database"""
serializer_class = serializers.LeadCompleteSerializer
queryset = LeadComplete.objects.all()
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def get_queryset(self):
"""Retrieve the leadcomplete for the authed user"""
return self.queryset.filter(user=self.request.user)
test_lead_complete_api.py
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
from core. models import LeadComplete
from leads.serializers import LeadCompleteSerializer
LEADCOMPLETE_URL = reverse('leads:leadcomplete-list')
def sample_leadComplete(user, **params):
"""Create and return a sample leadComplete"""
defaults = {
'title': 'Samle Company',
'time_minutes': 10,
'score': 5.00,
}
defaults.update(params)
return LeadComplete.objects.create(user=user, **defaults)
def PublicLeadCompleteApiTests(TestCase):
"""Test unauthenticated LeacComplete access"""
def setUp(self):
self.client = APIClient()
def test_auth_required(self):
""""Test that authentication is required"""
res = selft.client.get(LEADCOMPLETE_URL)
self.assertEqual(res.status_code, status.HTTP_401_UNAUTHORIZED)
class PrivateLeadCompleteApiTests(TestCase):
""""Test authenticated recipe API access"""
def setUp(self):
self.client = APIClient()
self.user = get_user_model().objects.create_user(
'test@unionresolute.com',
'testpass'
)
self.client.force_authenticate(self.user)
def test_retrieve_leadComplete(self):
"""Test retrieving LeadComplete list"""
sample_leadComplete(user=self.user)
sample_leadComplete(user=self.user)
res = self.client.get(LEADCOMPLETE_URL)
leadComplete = LeadComplete.objects.all().order_by('-id')
serializer = LeadCompleteSerializer(LeadComplete, many=True)
self.assertEqual(res.status_code, status.HTTP_200_OK)
self.assertEqual(res.data, serializer.data)
def test_leadComplete_limited_to_user(self):
"""Test retrieving leadComplete for user"""
user2 = get_user_model().objects.create_user(
'other@unionresolute.com',
'password123'
)
sample_leadComplete(user=user2)
sample_leadComplete(user=self.user)
res = self.client.get(LEADCOMPLETE_URL)
leadComplete = LeadComplete.objects.filter(user=self.user)
serializer = LeadCompleteSerializer(leadComplete, many=True)
self.assertEqual(res.status_code, status.HTTP_200_OK)
self.assertEqual(res.data, serializer.data)
错误:
ERROR: test_retrieve_leadComplete (leads.tests.test_leadcomplete_api.PrivateLeadCompleteApiTests)
Test retrieving LeadComplete list
----------------------------------------------------------------------
Traceback (most recent call last):
File "/app/leads/tests/test_leadcomplete_api.py", line 58, in test_retrieve_leadComplete
self.assertEqual(res.data, serializer.data)
File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 768, in data
ret = super(ListSerializer, self).data
File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 686, in to_representation
self.child.to_representation(item) for item in iterable
TypeError: 'ModelBase' object is not iterable
【问题讨论】:
标签: django django-models django-rest-framework django-views django-serializer