我试图通过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)),
]
答案 0 :(得分:1)
swappable
是undocumented feature,实际上只应该用于自定义User
模型。 The doc on custom user models明确指出,一旦您使用自定义用户模型,直接引用contrib.auth.models.User
将无效:
如果直接引用User(例如,通过在外键中引用它),则代码将无法在AUTH_USER_MODEL设置已更改为其他用户模型的项目中使用。
您可能希望阅读本章的其余部分FWIW。
总而言之:正如Daniel Roseman所提到的,你很可能想要使用自己的MyDevice
模型而不是默认的Device
模型。如果能解决问题,最终会向django-fcm
doc提供补丁。