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__'