我在那裏,所以我試圖用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