【问题标题】:How to set items to a specific Todolist in Django Rest Framework?如何在 Django Rest Framework 中将项目设置为特定的 Todolist?
【发布时间】:2017-06-23 17:18:32
【问题描述】:

我正在使用 django rest 框架构建一个 TODO 应用程序。我有两个模型,即 todolist 和 todoitem。如何将新的 todoitem 设置为特定的 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")

]

【问题讨论】:

    标签: django python-2.7 django-rest-framework


    【解决方案1】:

    查看:

    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__'
    

    网址:

    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)),
    ]
    

    将数据{'parent':1 'description':'example',....} 发送到www.example.com/todo_item/,parent 是你的todolist'id。

    【讨论】:

      猜你喜欢
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2015-07-28
      • 2022-01-26
      • 2013-06-16
      相关资源
      最近更新 更多