我在那里,所以我试图用DRF单元测试,我有与.post
Django的REST框架单元测试
一些问题,我认为这是与我使用的,但我不能外键没有找到任何好的例子。
串行:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ('password', 'id', 'username', 'email')
write_only_fields = ('password',)
def restore_object(self, attrs, instance=None):
# call set_password on user object. Without this
# the password will be stored in plain text.
user = super(UserSerializer, self).restore_object(attrs, instance)
user.set_password(attrs['password'])
return user
class MultimediaSerializer(serializers.ModelSerializer):
class Meta:
model = Multimedia
class SpaceSerializer(serializers.ModelSerializer):
user = UserSerializer()
avatar = serializers.HyperlinkedRelatedField(view_name='multimedia-detail')
contents = serializers.HyperlinkedRelatedField(
many=True, view_name='multimedia-detail'
)
api_key = serializers.SerializerMethodField('get_api_token')
class Meta:
model = Space
型号:
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
avatar = models.ForeignKey(
'core.Multimedia', blank=True, null=True,
related_name='user_profiles_avatares'
)
language = models.ForeignKey('core.Language', blank=True, null=True)
birth_date = models.DateTimeField(blank=True, null=True)
country = CountryField(blank=True, default='PT')
about_me = models.TextField(blank=True, default='')
facebook_token = models.TextField(blank=True, default='')
space_themed_motivation = models.TextField(blank=True, default='')
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
last_login_on = models.DateTimeField(auto_now=True)
class Space(UserProfile):
degree = models.CharField(max_length=200, blank=True)
galleries = models.ManyToManyField('core.Gallery', blank=True, null=True)
contents = models.ManyToManyField('core.Multimedia', blank=True, null=True)
所以,我在此端点使用我的身体数据:
def test_register_space(self):
url = reverse('space-list')
data = {
"user": {
"username": "blaya2",
"email": "[email protected]",
"password": "blayablaya"
},
"avatar": "http://localhost:8000/api/v1/multimedia/1/",
"contents": [
"http://localhost:8000/api/v1/multimedia/1/",
"http://localhost:8000/api/v1/multimedia/2/"
],
"language": "PT",
"birth_date": "2014-10-30T10:59:22Z",
"country": "PT",
"about_me": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum",
"facebook_token": "CAALDUez5gFsBAHGZCsi1BOeKwc",
"space_themed_motivation": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum",
"created_on": "2014-10-30T10:59:30.556Z",
"updated_on": "2014-10-30T11:30:00.717Z",
"last_login_on": "2014-10-30T11:30:00.717Z",
"degree": "Mestrado"
}
response = self.client.post(url, data, format='json')
print response.data
,然后我用response = self.client.post(url, data, content_type='application/json')
我把它称之为也试过没有运气的json.dumps()。我总是得到400
状态码。
当我这样做print response.data
我得到:
{'language': [u"Invalid pk 'PT' - object does not exist."], 'user': [{u'non_field_errors': [u'Invalid data']}], 'contents': [u'Invalid hyperlink - object does not exist.'], 'avatar': [u'Invalid hyperlink - object does not exist.']}
我明白我必须有链接指向,但我不知道语法得到这个工作。
有谁知道我可以如何得到这个工作?
我知道你发布这篇文章已经很长时间了,但你有没有想出一个解决方案? – cjukjones 2016-02-24 02:06:59