解决DRF FormSerializer中的Default属性的正确方法,这在首次迁移时会导致ProgrammingError

时间:2019-04-12 01:03:15

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

我有一个正在使用的旧系统,并且有一个FormSerializer,如下所示:

class SburblesFormSerializer(serializers.HyperlinkedModelSerializer):
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(),
                                              default=serializers.CurrentUserDefault())
    status = serializers.PrimaryKeyRelatedField(queryset=Status.objects.all(),
                                                default=serializers.CreateOnlyDefault(Status.objects.get(pk=1)))

并且系统具有夹具来填充这些状态。

当我设置新环境时,python manage.py migrate不起作用,生成了ProgrammingError

django.db.utils.ProgrammingError: relation "api_status" does not exist
LINE 1: ...i_status"."name", "api_status"."description" FROM "api_statu...

然后,要运行迁移,我可以从PrimaryKeyRelatedField中删除默认参数,进行迁移,然后回滚此序列化文件上的更改。

但是,我想了解两件事:

  • 为什么Django在尝试调用序列化程序之前尝试执行此操作
  • 解决此问题的正确方法是什么,而不必每次都要在新计算机上安装系统时都删除默认值并将其放回去。

0 个答案:

没有答案