首页 > 解决方案 > Django: django.db.utils.OperationalError: no such table: #deprecated_bug_assignee 何时使用“POST”方法,但“GET”方法可以

问题描述

GET 方法可以响应数据,使用“POST”方法时发生错误,错误是:

Django: django.db.utils.OperationalError: no such table: #deprecated_bug_assignee when to use “POST” method, but “GET” method is ok

为什么?他们使用的是同一张桌子!


视图.py

from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status


class DeprecatedBugAssigneeList(APIView):
    """
    列出所有的snippets或者创建一个新的snippet。
    """

    def get(self, request, format=None):
        dbsa = DeprecatedBugAssignee.objects.using('slave').all()
        serializer = DeprecatedBugAssigneeSerializer(dbsa, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = DeprecatedBugAssigneeSerializer(data=request.data)
        if serializer.is_valid():
            bug_serializer = serializer.save()
            bug_info = DeprecatedBugAssignee.objects.filter(bugid__exact=request.data['bugid'])
            bug_serializer.add(*bug_info)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化程序.py

from apps.cn_relnotes.models import DeprecatedBugAssignee, DeprecatedBugCode

class DeprecatedBugAssigneeSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = DeprecatedBugAssignee
        fields = ('bugid', 'oassignee', 'nassignee', 'opdatime', 'operatornm', 'state', 'duration')

模型.py

from django.db import models

class DeprecatedBugAssignee(models.Model):
    bugid = models.IntegerField()
    oassignee = models.CharField(max_length=255)
    nassignee = models.CharField(max_length=255)
    opdatime = models.DateTimeField()
    operatornm = models.CharField(max_length=255)
    state = models.CharField(max_length=64, blank=True, null=True)
    duration = models.FloatField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = '#deprecated_bug_assignee'
        unique_together = (('bugid', 'opdatime'),)

网址.py

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from apps.cn_relnotes import views

urlpatterns = [
    url(r'^v1/bug/$', views.DeprecatedBugAssigneeList.as_view())
]

urlpatterns = format_suffix_patterns(urlpatterns)

标签: pythondjangodjango-rest-framework

解决方案



设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'slave': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
    },
}

DATABASE_ROUTERS = ['relnotes.database_router.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {
    'project': 'default',
    'app': 'slave'
}

推荐阅读