django项目增加脚本,造假数据同步到数据库
--project/ --app/ --scripts/ -fake.py manage.py# project/scripts/fake.pyimport sysimport osimport djangoback = os.path.dirnameBASE_DIR = back(back(os.path.abspath(__file__)))sys.path.append(BASE_DIR)...if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') # 启动django环境 django.setup() ...
orm group 操作
# ormfrom django.db.models import Sum, F# select pcsmc as key, sum(jls) as value from table where fjmc=:fjmc # order by sum(jls) desc limit 10data = Table.objects.filter(fjmc).values(key=F('pcsmc')).annotate(value=Sum('jls')).order_by('-value')[:10]
- drf post 如何验证csrf
- 基于类的视图里如何实现自定义方法
- drf action 是什么
序列化时,控制关联对象输出内容
tags = serializers.SlugRelatedField( queryset=Tag.objects.all(), many=True, required=False, slug_field='text' )"""通过前面章节已经知道,默认的嵌套序列化器只显示外链的 id用 SlugRelatedField 直接显示其 text 字段的内容"""
新增某对象时,希望关联对象不存在就自己创建
"""多对多关系,DRF 默认你必须先得有这个外键对象,才能指定其关系DRF执行默认的字段有效性检查比 序列器里 validate、.create()/.update() 都要早正确的解法是覆写 to_internal_value() 方法:"""# serializers.pyclass ArticleSerializer(serializers.HyperlinkedModelSerializer): ... # 覆写方法,如果输入的标签不存在则创建它 def to_internal_value(self, data): tags_data = data.get('tags') if isinstance(tags_data, list): for text in tags_data: if not Tag.objects.filter(text=text).exists(): Tag.objects.create(text=text) return super().to_internal_value(data)
在序列化中增加model里不存在的字段
# serializers.pyclass ArticleDetailSerializer(serializers.HyperlinkedModelSerializer): body_html = serializers.SerializerMethodField() toc_html = serializers.SerializerMethodField() def get_body_html(self, obj): return obj.get_md()[0] def get_toc_html(self, obj): return obj.get_md()[1] class Meta: model = Article fields = '__all__'