django修改models重建数据库的操作
第二次修改models.py以后再次
pythonmanage.pymakemigrations
提示如下
Youaretryingtoaddanon-nullablefield'address'toxc_userswithoutadefault;wecan'tdothat(thedatabaseneedssomethingtopopulateexistingrows).Pleaseselectafix:1)Provideaone-offdefaultnow(willbesetonallexistingrows)2)Qu
于是删除数据库表,继续报相同的错误
makemigration需要指定名称,然后migrate才能识别两次
pythonmanage.pymakemigrations--namesqlname
然后再执行:
pythonmanage.pymigrate
成功解决问题!
补充知识:djangorestframework如何一次性序列化同一个数据库下多个model表数据在一个json页面下
在django项目中,首先我们要安装django-rest-mutiple-models
pipinstalldjango-rest-multiple-models
然后在setting配置中配置一下APP
INSTALLED_APPS=( .... 'drf_multiple_model', )
在我们的views视图函数下引入
fromdrf_multiple_model.viewsimportObjectMultipleModelAPIView
如下两个模型
classPlay(models.Model): genre=models.CharField(max_length=100) title=models.CharField(max_length=200) pages=models.IntegerField() classPoem(models.Model): title=models.CharField(max_length=200) style=models.CharField(max_length=100) lines=models.IntegerField() stanzas=models.IntegerField()
序列化如下
classPlaySerializer(serializers.ModelSerializer):
classMeta:
model=Play
fields=('genre','title','pages')
classPoemSerializer(serializers.ModelSerializer):
classMeta:
model=Poem
fields=('title','stanzas')
views中我们可以这么写,继承一个ObjectMutipleModelAPIView
fromdrf_multiple_model.viewsimportObjectMultipleModelAPIView
classTextAPIView(ObjectMultipleModelAPIView):
querylist=[
{'queryset':Play.objects.all(),'serializer_class':PlaySerializer},
{'queryset':Poem.objects.filter(style='Sonnet'),'serializer_class':PoemSerializer},
....
]
如果我们使用的url是router,那这里我们就应该继承ObjectMutipleModelAPIViewset
具体的引入
fromdrf_multiple_model.viewsetsimportObjectMultipleModelAPIViewSet
DRF页面的显示效果如下
{
"Play":[
{"genre":"Comedy","title":"AMidsummerNight"sDream","pages":350},
{"genre":"Tragedy","title":"RomeoandJuliet","pages":300},
....
],
"Poem":[
{"title":"ShallIcomparetheetoasummer"sday","stanzas":1},
{"title":"Asadecrepitfathertakesdelight","stanzas":1},
....
],
}
效果就是能在一个json页面下序列化出多个不同的model数据
我们还可以对每个表的数据进行分页
fromdrf_multiple_model.paginationimportMultipleModelLimitOffsetPagination
views下可以这么写
classLimitPagination(MultipleModelLimitOffsetPagination):
default_limit=10
意思是每个model默认显示前十条数据
如果前端需要,url上可以加上limit=5,自定义默认显示前五条数据
更多详细内容,github搜索DjangoRestMultipleModels
以上这篇django修改models重建数据库的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。