2017-06-23 6 views
0

django rest frameworkを使ってTODOアプリをビルドしています。私はtodolistとtodoitemの2つのモデルにする必要があります。私は特定のtodolistに新しいtodoitemを設定できますか?私は、外部キーを使用してみましたが、それは、私の悪い英語のため申し訳ありませんが、誰かが私に助けてください働いていなかった Django Rest Frameworkの特定のTodolistにアイテムを設定するには?

マイ models.py

class todolist(models.Model): 

    user = models.ForeignKey(User,on_delete=models.CASCADE,default=None) 
    name = models.CharField(max_length=128) 
    creation_date = models.DateField(auto_now=True) 

    def __unicode__(self): 
     return self.name 

class todoitem(models.Model): 
    description = models.CharField(max_length=150) 
    completed = models.BooleanField(default=False) 
    due_by = models.DateField(auto_now=True) 
    parent = models.ForeignKey(todolist,on_delete=models.CASCADE) 

    def _unicode__(self): 
     return self.description 

マイclassviews.py

class Todolist(LoginRequiredMixin,ListCreateAPIView): 
    serializer_class = listserializer 
    def perform_create(self, serializer): 
     serializer.save(user=self.request.user) 

    def get_queryset(self): 
     self.queryset = todolist.objects.filter(user=self.request.user) 
     return super(Todolist, self).get_queryset() 

class Todolistdetail(LoginRequiredMixin,RetrieveUpdateDestroyAPIView): 
    def get_queryset(self): 
     self.queryset = todolist.objects.filter(user=self.request.user) 
     return super(Todolistdetail, self).get_queryset() 
    serializer_class = listserializer 

class Todoitem(LoginRequiredMixin,ListCreateAPIView): 
    def perform_create(self, serializer): 
     temp = self.queryset(todolist.objects.filter(id=self.kwargs['pk'])) 
     serializer.save(parent=temp) 

    def get_queryset(self): 
     temp = todolist.objects.filter(id=self.kwargs['pk']) 
     self.queryset = todoitem.objects.filter(parent=temp) 
     return super(Todoitem, self).get_queryset() 
    serializer_class = itemserializer 

class Todoitemdetail(LoginRequiredMixin,RetrieveUpdateDestroyAPIView): 
    def get_queryset(self): 
     temp = todolist.objects.filter(id=self.kwargs['list_id']) 
     self.queryset = todoitem.objects.filter(parent=temp) 
     return super(Todoitemdetail, self).get_queryset() 
    serializer_class = itemserializer 

マイserializers.py

class listserializer(serializers.ModelSerializer): 
    user = serializers.ReadOnlyField(source='user.username') 
    class Meta: 
     model = todolist 
     fields = '__all__' 

class itemserializer(serializers.ModelSerializer): 
    parent = serializers.ReadOnlyField(source='todolist.id') 
    class Meta: 
     model = todoitem 
     fields = '__all__' 

私のurls.py

from todoapp import classviews 
app_name = "todoapp" 

urlpatterns = [ 
    url(r'^list/$',classviews.Todolist.as_view(),name="list_lists"), 
    url(r'^list/(?P<pk>[0-9]+)/$',classviews.Todolistdetail.as_view(),name="each_list"), 
    url(r'^list/(?P<pk>[0-9]+)/item/$',classviews.Todoitem.as_view(),name="list_items"), 
    url(r'^list/(?P<list_id>[0-9]+)/item/(?P<pk>[0-9]+)/$',classviews.Todoitemdetail.as_view(),name="each_item") 

] 

答えて

0

ビュー:

from rest_framework.viewsets import ModelViewSet 
class TodoitemViewSet(ModelViewSet): 
    queryset = Todoitem.objects.all() 
    serializer_class = itemserializer 
    permission_classes = (IsAuthenticated) 

serializer.py

class itemserializer(serializers.ModelSerializer): 
    class Meta: 
     model=todoitem 
     fields='__all__' 

URL:www.example.com/todo_item/

from rest_framework import routers 
router = routers.DefaultRouter() 
router.register(r'todo_item', TodoitemViewSet) 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include(router.urls)), 
] 

jsutポストデータ{'parent':1 'description':'example',....}を、親は自分のtodolist'idです。

関連する問題