设置django-fmc时,管理员无法使用

时间:2017-01-05 18:30:06

标签: python django firebase-cloud-messaging

我试图通过Django(v 1.97,Python v2.7.12,djangorestframework v3.3.3)设置django-fmc来处理存储注册ID和向设备发送通知。我正在关注tutorial they provide,但它似乎无法正常工作。

运行本地服务器时出现以下错误 python manage.py fcm_urls

...
File "C:\Work\Dev\LiveTracking\Api\app\views.py", line 50, in DeviceViewSet
queryset = Device.objects.all()
File "C:\Work\Dev\LiveTracking\Api\env\lib\site-packages\django\db\models\manager.py", line 277, in __get__
self.model._meta.swapped,
AttributeError: Manager isn't available; 'fcm.Device' has been swapped for 'app.MyDevice'

我现在不想在MyDevice模型中添加其他字段。我看了一遍,但无法修复此错误。如果有人能够对这个错误有所了解,那将非常感激。

以下是我的一些代码段:

settings.py

INSTALLED_APPS = (
'fcm',
)

# Firebase Cloud Messaging Key
FCM_APIKEY = 'AIzaSyCaqHZIcaGDOpfTZUmAHEowsqD-fCtow6A'

# Location of device model
FCM_DEVICE_MODEL = 'app.MyDevice'

serializers.py

from fcm.models import Device

class DeviceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Device
        fields = ('dev_id','reg_id','name','is_active')

views.py

from rest_framework import viewsets
from fcm.models import Device
from fcm.serializers import DeviceSerializer

class DeviceViewSet(viewsets.ModelViewSet):
    queryset = Device.objects.all()
    serializer_class = DeviceSerializer

urls.py

from rest_framework import routers
from fcm.views import DeviceViewSet

router = routers.DefaultRouter()
router.register(r'devices', DeviceViewSet)

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

1 个答案:

答案 0 :(得分:1)

swappableundocumented feature,实际上只应该用于自定义User模型。 The doc on custom user models明确指出,一旦您使用自定义用户模型,直接引用contrib.auth.models.User将无效:

  

如果直接引用User(例如,通过在外键中引用它),则代码将无法在AUTH_USER_MODEL设置已更改为其他用户模型的项目中使用。

您可能希望阅读本章的其余部分FWIW。

总而言之:正如Daniel Roseman所提到的,你很可能想要使用自己的MyDevice模型而不是默认的Device模型。如果能解决问题,最终会向django-fcm doc提供补丁。