2017-02-14 12 views
2

私はDjangoを初めて使い、ネストされたルータを動作させるのに苦労しています。ネストされたルータが動作しない

class Event(models.Model): 
    class Meta: 
     db_table = 'events' 

    STATUS_CHOICES = (
     ('scheduled', 'Scheduled'), 
     ('completed', 'Completed'), 
     ('cancelled', 'Cancelled') 
    ) 

    name = models.TextField() 
    purpose = models.TextField() 
    date_time = models.DateTimeField() 
    description = models.TextField() 
    programme = models.TextField() 
    entry_fee = models.DecimalField(max_digits=6, decimal_places=2) 
    status = models.TextField(choices=STATUS_CHOICES) 
    comments = models.TextField(null=True) 
    people_invited = models.ManyToManyField('Contact', through='EventInvitation') 
    organizer = models.ForeignKey('Organizer', on_delete=models.CASCADE) 

class Organizer(models.Model): 
    STATUS_CHOICES = (
     ('inactive', 'Inactive'), 
     ('active', 'Active'), 
    ) 

    class Meta: 
     db_table = 'organizers' 

    first_name = models.TextField() 
    middle_name = models.TextField(null=True) 
    last_name = models.TextField(null=True) 
    email = models.OneToOneField('Email', on_delete=models.CASCADE) 
    company_name = models.TextField(null=True) 
    company_description = models.TextField(null=True) 
    password = models.TextField() 
    login_token = models.TextField(null=True) 
    registered_on = models.DateTimeField(null=True) 
    status = models.TextField(choices = STATUS_CHOICES, default='inactive') 

私はAPIを処理するためにrest_apiと呼ばれる別のアプリを作成:基本的に、私は次のように私はEventOrganizerモデルを持っているエンドポイント/api/v1/organizers/1/events/1を、モデル化しようとしています。モデルはshared_stuffというアプリに保存されています。とにかく、ここではプロジェクトレベルurls.pyは(今のところfront_endアプリを気にしない)です:

from django.conf.urls import include, url 

urlpatterns = [  
    url(r'^api/v1/', include('rest_api.urls')), 
    url(r'^', include('frontend.urls')), 
] 

そして、ここだurls.pyアプリrest_apiから:

from django.conf.urls import url, include 
from rest_framework_nested import routers 
from .views import * 

router = routers.SimpleRouter() 

# /organizers/12/events/1 
router.register(r'organizers', OrganizerViewSet, base_name='organizers') 
organizer_router = routers.NestedSimpleRouter(router, r'organizers', lookup='organizers') 
organizer_router.register(r'events', EventViewSet, base_name='organizers-events') 

urlpatterns = [ 
    url(r'^', include(router.urls)), 
    url(r'^', include(organizer_router.urls)), 
] 

ここrest_apiアプリのためのserializers.pyです:

class EventSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Event 
     fields = ['id', 'name', 'purpose', 'date_time', 'description', 'programme', 'entry_fee', 'status', 'comments'] 

class OrganizerSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Organizer 
     fields = ['id', 'first_name', 'middle_name', 'last_name', 'email', 'company_name', 'company_description', 'registered_on', 'status'] 

    events = serializers.HyperlinkedIdentityField(
     view_name = 'events_list', 
     lookup_url_kwarg = 'organizer_pk' 
    ) 

最後に、views.pyのアプリrest_api

from rest_framework import viewsets 
from .models import * 
from .serializers import * 

class EventViewSet(viewsets.ModelViewSet): 
    def list(self, request, organizer_pk=None, name='events_list'): 
     events = self.queryset.filter(organizer=organizer_pk) 
     serializer = EventSerializer(events, many=True) 
     return Response(serializer.data) 

class OrganizerViewSet(viewsets.ModelViewSet): 
    def list(self, request, name='organizers_list'): 
     data = Organizer.objects.all() 
     serializer = OrganizerSerializer(data, many=True) 
     return Response(serializer.data) 

私のコードでは多くのことが壊れていると確信しています。問題は、私は次のエラー取得しています:

TypeError: list() got an unexpected keyword argument 'organizers_pk'

を私が間違っているかわからないんだけど、といくつかの助けに感謝します!

答えて

1

私はそれは次のようにEventViewSetを変更することにより、作業ました:

def list(self, request, organizers_pk=None, name='events_list'): 
    events = self.queryset.filter(organizer=organizers_pk) 
    serializer = EventSerializer(events, many=True) 
    return Response(serializer.data) 

私はorganizer_pkを持っていたのに対し、私はなぜわからないんだけど、予想されるキーワード引数名​​はorganizers_pkです。私はこれがなぜそうであるか知りたいが、それ以外は私の問題は今解決されている。

関連する問題