2013-05-29 4 views
3

Django Rest Framework로 작업하려고합니다. 외래 키를 통해 다른 클래스에 연결된 클래스가 있습니다. 이제 API 호출을 만들어 두 모델을 모두 만들고 싶습니다.Django Rest Framework - 동일한 API 호출의 두 모델

class A(models.Model): 
    text = models.CharField(...) 
... 


class B(models.Model): 
... 
     myfield= models.ForeignKey(A) 

괜찮습니다.

class SerializerForB(serializers.HyperlinkedModelSerializer): 
    text = serializers.CharField() 
.... 

이 또한 괜찮습니다 (메타 등). 내가 다음 A.

의 텍스트를 넣어 난 B 플러스 하나의 모든 필드와 양식을 볼 수있는 API의 URL에 가면 내가

class BCreate(CreateAPIView): 
    serializer_class = SerializerForB 


def pre_save(self, obj): 
    b = B(text=self.request.DATA['text']) 
    b.save() 
    obj.B=b 

probelm가 함께이보기를 썼다 실제로 사용 (A)의 저장 및 데이터 필드 text을 가지고 있다는 사실이

'text' is an invalid keyword argument for this function 

가 나는를 만들기위한 API를 작성하고 내가 API를 통해 B를 만들 때 pk를 사용해야 말한다? 아니면 한 번에 둘 다 할 수 있습니까?

환경 : 당신이 B(text=self.request.DATA['text'])로 인스턴스화하려고 할 때

Request Method: POST 
Request URL: http://localhost:8000/api/task/human/create/ 

Django Version: 1.5.1 
Python Version: 2.7.2 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.humanize', 
'django.contrib.messages', 
'django.contrib.flatpages', 
'django.contrib.markup', 
'django.contrib.admin', 
'general', 
'requester', 
'executor', 
'crispy_forms', 
'social_auth', 
'developer', 
'restapi', 
'requests', 
'rest_framework', 
'rest_framework.authtoken', 
'djrill', 
'mturk', 
'jsonify', 
'gravatar') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    77.   return view_func(*args, **kwargs) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/views.py" in dispatch 
    326.    response = self.handle_exception(exc) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/views.py" in dispatch 
    323.    response = handler(request, *args, **kwargs) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/generics.py" in post 
    361.   return self.create(request, *args, **kwargs) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/mixins.py" in create 
    50.   if serializer.is_valid(): 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/serializers.py" in is_valid 
    478.   return not self.errors 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/serializers.py" in errors 
    470.     ret = self.from_native(data, files) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/serializers.py" in from_native 
    866.   instance = super(ModelSerializer, self).from_native(data, files) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/serializers.py" in from_native 
    323.    return self.restore_object(attrs, instance=getattr(self, 'object', None)) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/rest_framework/serializers.py" in restore_object 
    851.    instance = self.opts.model(**attrs) 
File "/Users/stefanotranquillini/.virtualenvs/CC/lib/python2.7/site-packages/django/db/models/base.py" in __init__ 
    415.     raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0]) 

Exception Type: TypeError at /api/task/human/create/ 
Exception Value: 'reward_quantity' is an invalid keyword argument for this function 
+0

이 질문에서 예외에 대한 추적을 포함하는 것이 좋습니다. –

+0

추적 결과가 있습니다. reward_quantity가 예제 텍스트가 아닙니다. 당신도 알 수 있듯이 문제는 같습니다. – EsseTi

+0

문제는 'reward_quantity'가 모델의 필드가 아니라는 것입니다. –

답변

0

모델 클래스 'B'는, 당신이보고있는 예외를 발생되고, 아마도 모델 클래스 Btext 필드가 없습니다.

+0

모델에 있습니다. 나는 더 많은 테스트를 해보 겠지만, 나는 그것이 필드를 갖고 있으며 A의 자동 직렬화에 대한 불평이 있다는 것을 확신한다. 나는 그것을 점검 할 것이다. – EsseTi

관련 문제