add business logic

master
kongfp 2 years ago
parent 75fc321db7
commit b3f103ed22

@ -1,24 +1,18 @@
# XZNSH后台接口文档
<details>
<summary>条件查询</summary>
<summary>查询</summary>
- 请求方式GET
- 请求链接:http://127.0.0.1:8002/api/
- 请求链接:/api/
- 请求参数:
| 参数名 | 参数值 | 是否必填 | 参数类型 | 描述说明 |
| ----------- |---------------------| -------- |--------| ---------- |
| record_time | 2023-05-26 13:09:05 | 否 | string | 记录仪时间 |
| police_id | 00000001 | 否 | string | 警号 |
| event_type | 0 | 否 | string | 事件类型 |
| 参数名 | 参数值 | 是否必填 | 参数类型 | 描述说明 |
| ----------- | ------------------- | -------- | -------- | ---------- |
| record_time | 2023-05-26 13:09:05 | 否 | string | 记录仪时间 |
| | | | | |
| event_type | 工作人员操作按键 | 否 | string | 事件类型 |
- 可选参数:
@ -33,67 +27,27 @@
| ---------------- | ------------------------------------------------- | -------- |--------------|
| uid | 1 | int | 自增 |
| video_hash | 38fb463b135fa12534104f85492cc6f1 | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 记录仪时间 |
| police_id | 00000001 | string | 警号 |
| event_type | 1 | string | 事件类型/车辆违法原因 |
| is_violation | true | bool | 执法人员是否违规 |
| small_image | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| relative_time | 4.0 | float | 相对时间 |
| video_dir | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| car_number | 苏a045689 | string | 车牌号 |
| ai_analysis | 违规 | string | 执法人员违规行为 |
| add_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| record_time | 2023-05-26 13:09:05 | string | 视频显示时间 |
| event_type | 工作人员操作按键 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| violation_reason | | string | 违规原因 |
| thumbnail | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| scene | atm机器操作 | string | 场景 |
| video_path | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| ai_analysis | | string | 分析结果 |
| insert_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
| is_illegal | True | bool | 行人是否违法 |
</details>
<details>
<summary>查询所有</summary>
- 请求方式GET
- 请求链接http://127.0.0.1:8002/api/
- 可选参数:
| 参数名 | 参数值 | 是否必填 | 参数类型 | 描述说明 |
| --------- | ------ | -------- | -------- | -------------------- |
| page | 1 | 否 | string | 页码 |
| page_size | 20 | 否 | string | 页面大小(每页条数) |
- 返回值
| 参数名 | 参数值 | 参数类型 | 描述说明 |
| ------------- | ------------------------------------------------- | -------- | ------------------------ |
| uid | 1 | int | 自增 |
| video_hash | 38fb463b135fa12534104f85492cc6f1 | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 记录仪时间 |
| police_id | 00000001 | string | 警号 |
| event_type | 1 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| small_image | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| relative_time | 4.0 | float | 相对时间 |
| video_dir | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| car_number | 苏a045689 | string | 车牌号 |
| ai_analysis | 违规 | string | 分析结果 |
| add_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
</details>
<details>
<summary>新增数据</summary>
- 请求方式POST
- 请求链接:http://127.0.0.1:8002/api/
- 请求链接:/api/
- 请求body
@ -101,58 +55,53 @@
{
"video_hash": "vbhdrbvcw",
"record_time": "2023-05-26 13:09:05",
"police_id": "00000002",
"event_type": "1",
"scene": "atm机器操作",
"event_type": "工作人员操作按键",
"is_violation": true,
"small_image": "nvikefrooiwer",
"relative_time": 4.0,
"video_dir": "/d/test",
"car_number": "苏a045689",
"ai_analysis": "违规"
"violation_reason": "",
"thumbnail": "nvikefrooiwer",
"video_path": "/d/test",
"ai_analysis": ""
}
```
| 参数名 | 参数值 | 是否必填 | 参数类型 | 描述说明 |
| ------------- |---------------------| -------- |----------| ------ |
| video_hash | vbhdrbvcw | 是 | string | 视频哈希 |
| record_time | 2023-05-26 13:09:05 | 是 | datetime | 记录仪时间 |
| police_id | 00000002 | 是 | string | 警号 |
| event_type | 1 | 是 | string | 事件类型 |
| video_hash | vbhdrbvcw | 是 | string | 视频哈希 |
| record_time | 2023-05-26 13:09:05 | 是 | datetime | 视频显示时间 |
| scene | atm机器操作 | 是 | string | 场景 |
| event_type | 工作人员操作按键 | 是 | string | 事件类型 |
| is_violation | true | 是 | bool | 是否违规 |
| small_image | nvikefrooiwer | 是 | string | 缩略图 |
| relative_time | 4.0 | 是 | int | 相对时间 |
| video_dir | /d/test | 是 | string | 视频路径 |
| car_number | 苏a045689 | 是 | string | 车牌号 |
| ai_analysis | 违规 | 是 | string | 分析结果 |
| violation_reason | | string | 违规原因 |
| thumbnail | nvikefrooiwer | 是 | string | 缩略图 |
| video_path | /d/test | 是 | string | 视频路径 |
| ai_analysis | | 是 | string | 分析结果 |
- 返回值
| 参数名 | 参数值 | 参数类型 | 描述说明 |
| ------------- | ------------------------------------------------- | -------- | ------------------------ |
| uid | 1 | int | 自增 |
| video_hash | 38fb463b135fa12534104f85492cc6f1 | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 记录仪时间 |
| police_id | 00000001 | string | 警号 |
| event_type | 1 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| small_image | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| relative_time | 4.0 | float | 相对时间 |
| video_dir | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| car_number | 苏a045689 | string | 车牌号 |
| ai_analysis | 违规 | string | 分析结果 |
| add_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
</details>
| 参数名 | 参数值 | 参数类型 | 描述说明 |
| ---------------- | ------------------------------------------------- | -------- |--------------|
| uid | 1 | int | 自增 |
| video_hash | 38fb463b135fa12534104f85492cc6f1 | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 视频显示时间 |
| event_type | 工作人员操作按键 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| violation_reason | | string | 违规原因 |
| thumbnail | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| scene | atm机器操作 | string | 场景 |
| video_path | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| ai_analysis | | string | 分析结果 |
| insert_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
<details>
<summary>修改数据</summary>
- 请求方式put
- 请求链接:http://127.0.0.1:8002/api/20/
- 请求链接:/api/<uid>/
- 请求body
@ -160,93 +109,66 @@
{
"video_hash": "vbhdrbvcw",
"record_time": "2023-05-26 13:09:05",
"police_id": "00000002",
"event_type": "1",
"scene": "atm机器操作",
"event_type": "工作人员操作按键",
"is_violation": true,
"small_image": "nvikefrooiwer",
"relative_time": 4.0,
"video_dir": "/d/test",
"car_number": "苏a045689",
"ai_analysis": "违规"
"thumbnail": "nvikefrooiwer",
"video_path": "/d/test",
"ai_analysis": ""
}
```
| 参数名 | 参数值 | 是否必填 | 参数类型 | 描述说明 |
| ------------- |---------------------| -------- |-----|-------|
| video_hash | vbhdrbvcw | 是 | string | 视频哈希 |
| record_time | 2023-05-26 13:09:05 | 是 | string | 记录仪时间 |
| police_id | 00000002 | 是 | string | 警号 |
| event_type | 1 | 是 | string | 事件类型 |
| is_violation | true | 是 | bool | 是否违规 |
| small_image | nvikefrooiwer | 是 | string | 缩略图 |
| relative_time | 4.0 | 是 | float | 相对时间 |
| video_dir | /d/test | 是 | string | 视频路径 |
| car_number | 苏a045689 | 是 | string | 车牌号 |
| ai_analysis | 违规 | 是 | string | 分析结果 |
- 备注操作会修改uid为20的数据
| 参数名 | 参数值 | 是否必填 | 参数类型 | 描述说明 |
| ------------- |---------------------| -------- |----------| ------ |
| video_hash | vbhdrbvcw | 是 | string | 视频哈希 |
| record_time | 2023-05-26 13:09:05 | 是 | datetime | 视频显示时间 |
| scene | atm机器操作 | 是 | string | 场景 |
| event_type | 工作人员操作按键 | 是 | string | 事件类型 |
| is_violation | true | 是 | bool | 是否违规 |
| violation_reason | | string | 违规原因 |
| thumbnail | nvikefrooiwer | 是 | string | 缩略图 |
| video_path | /d/test | 是 | string | 视频路径 |
| ai_analysis | | 是 | string | 分析结果 |
- 返回值
- 返回值
| 参数名 | 参数值 | 参数类型 | 描述说明 |
| ------------- | ------------------------------------------------- | -------- | ---------------------- |
| uid | 1 | int | 自增 |
| video_hash | 38fb463b135fa12534104f85492cc6f1 | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 记录仪时间 |
| police_id | 00000001 | string | 警号 |
| event_type | 1 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| small_image | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| relative_time | 4.0 | float | 相对时间 |
| video_dir | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| car_number | 苏a045689 | string | 车牌号 |
| ai_analysis | 违规 | string | 分析结果 |
| add_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
</details>
| 参数名 | 参数值 | 参数类型 | 描述说明 |
| ---------------- | ------------------------------------------------- | -------- |--------------|
| uid | 20 | int | 自增 |
| video_hash | vbhdrbvcw | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 视频显示时间 |
| event_type | 工作人员操作按键 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| violation_reason | | string | 违规原因 |
| thumbnail | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| scene | atm机器操作 | string | 场景 |
| video_path | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| ai_analysis | | string | 分析结果 |
| insert_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
<details>
<details>
<summary>删除数据</summary>
- 请求方式delete
- 请求链接:http://127.0.0.1:8002/api/20/
- 请求链接:/api/<uid>/
- 备注操作会删除uid为20的数据
- 返回值:
| 参数名 | 参数值 | 参数类型 | 描述说明 |
| ------------- | ------------------------------------------------- | -------- | ------------------------ |
| uid | 1 | int | 自增 |
| video_hash | 38fb463b135fa12534104f85492cc6f1 | string | 视频哈希值 |
| record_time | 2023-05-26 13:09:05 | string | 记录仪时间 |
| police_id | 00000001 | string | 警号 |
| event_type | 1 | string | 事件类型 |
| is_violation | true | bool | 是否违规 |
| small_image | http://192.168.0.47:8000/media/images/0000609.jpg | string | 缩略图 |
| relative_time | 4.0 | float | 相对时间 |
| video_dir | http://192.168.0.47:8000/media/video/B1.MP4 | string | 视频地址 |
| car_number | 苏a045689 | string | 车牌号 |
| ai_analysis | 违规 | string | 分析结果 |
| add_time | 2023-05-31 18:42:15 | string | 记录添加时间(自动添加) |
| update_time | 2023-05-31 18:42:15 | string | 记录更新时间(自动添加) |
| is_display | true | bool | 是否展示(自动添加) |
</details>
<details>
<details>
<summary>登录</summary>
- 请求方式POST
- 请求链接:http://192.168.10.13:8000/api/login
- 请求链接:/api/login
- 请求body
@ -274,6 +196,3 @@
| roles | [] | list | 角色列表 |
| accessToken | eyJhbGciOiJIUzI1NiIsInR5cCI6 | string | token值 |
| expires | Wed Jul 5 16:03:31 2023 | string | token过期时间 |
</details>

@ -1,5 +1,5 @@
from django.contrib import admin
# Register your models here.
from app.models import TP
admin.site.register(TP)
from app.models import XZNSH
admin.site.register(XZNSH)

@ -3,40 +3,35 @@ from django.db import models
# Create your models here.
class TP(models.Model):
class XZNSH(models.Model):
# uid
uid = models.AutoField(primary_key=True)
# 视频哈希
video_hash = models.CharField(max_length=1024, verbose_name='视频哈希')
# 记录仪时间
record_time = models.DateTimeField(verbose_name='记录仪时间')
# 警号
police_id = models.CharField(max_length=50, null=True, blank=True, verbose_name='警号') # 警号可为空可不传
# 时间
record_time = models.DateTimeField(verbose_name='记录仪时间', null=True, default=None)
# 场景
scene = models.CharField(max_length=50, verbose_name='场景', null=True, blank=True)
# 事件类型
event_type = models.CharField(max_length=50, verbose_name='事件类型/车辆违法原因', null=True, blank=True) # 还没迁移
event_type = models.CharField(max_length=50, verbose_name='事件类型', null=True, blank=True) # 还没迁移
# 是否违规
is_violation = models.BooleanField(verbose_name='执法人员是否违规', null=True, blank=True)
is_violation = models.BooleanField(verbose_name='是否违规', null=True, blank=True)
# 违规原因
violation_reason = models.CharField(max_length=255, verbose_name='违规原因', null=True, blank=True)
# 缩略图
small_image = models.CharField(max_length=100, verbose_name='缩略图')
# 相对时间
relative_time = models.FloatField(verbose_name='相对时间')
thumbnail = models.CharField(max_length=100, verbose_name='缩略图')
# 视频路径
video_dir = models.CharField(max_length=100, verbose_name='视频路径')
# 车牌号
car_number = models.CharField(max_length=50, verbose_name='车牌号', null=True, blank=True) # 车牌可为空可不传
video_path = models.CharField(max_length=100, verbose_name='视频路径')
# 分析结果
ai_analysis = models.CharField(max_length=255, verbose_name='执法人员违规行为', null=True, blank=True) # 分析结果可为空可不传
ai_analysis = models.CharField(max_length=255, verbose_name='分析结果', null=True, blank=True)
# 加入时间
add_time = models.DateTimeField(auto_now_add=True, verbose_name='入时间')
insert_time = models.DateTimeField(auto_now_add=True, verbose_name='入时间')
# 更新时间
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
# 是否显示
is_display = models.BooleanField(default=True, verbose_name='是否显示')
is_illegal = models.BooleanField(verbose_name='车辆是否违法', null=True, blank=True)
class Meta:
db_table = "app_tp"
# 排序 uid倒序
ordering = ['-uid']

@ -3,12 +3,14 @@ import datetime
from rest_framework import serializers
from django_filters.rest_framework import FilterSet
import django_filters
from app.models import TP
from app.models import XZNSH
import logging
logger = logging.getLogger('mylogger')
class SerialMyModel(serializers.ModelSerializer):
class Meta:
model = TP
model = XZNSH
fields = "__all__"
@ -20,7 +22,7 @@ class SerialFilter(FilterSet):
event_type支持模糊匹配
"""
record_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='icontains')
police_id = django_filters.CharFilter(field_name='police_id', lookup_expr='icontains')
scene = django_filters.CharFilter(field_name='scene', lookup_expr='icontains')
event_type = django_filters.CharFilter(field_name='event_type', lookup_expr='icontains')
# 记录时间范围查询
start_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='gte')
@ -32,7 +34,7 @@ class SerialFilter(FilterSet):
def time_range_filter(self, queryset, name, value):
"""
@params queryset: TP.objects.all()返回的合集, 即视图类中的的queryset
@params queryset: objects.all()返回的合集, 即视图类中的的queryset
@params name: 为field_name
@params value: 为前端通过end_time字段传过来的值
"""
@ -51,8 +53,8 @@ class SerialFilter(FilterSet):
class Meta:
# 指定模型
models = TP
models = XZNSH
# 指定需要模糊查询的字段
fields = ("record_time", "police_id", "event_type", "ai_analysis",)
fields = ("record_time", "scene", "event_type", "ai_analysis",)

@ -19,11 +19,11 @@ from rest_framework.routers import DefaultRouter
from app import views
router = DefaultRouter()
router.register('', views.ModelQuery)
router.register('', views.XZNSHModelViewSet)
urlpatterns = [
path('', include(router.urls)),
path('add_user', views.RegisterLoginViewSet.as_view({"post": "tp_register"})),
path('login', views.LoginView.as_view({"post": "tp_login"})),
path('events', views.ModelQuery.as_view({"get": "query_event"})),
path('add_user', views.RegisterLoginViewSet.as_view({"post": "register"})),
path('login', views.LoginView.as_view({"post": "login"})),
path('events', views.XZNSHModelViewSet.as_view({"get": "get_events"}))
]

@ -1,13 +1,11 @@
import logging
from django.db.models import Count
from django.shortcuts import render
from django.views.decorators.http import require_http_methods
# Create your views here.
from rest_framework import viewsets
from rest_framework.response import Response
from app.models import TP
from app.models import XZNSH
from app.serializers import SerialMyModel, SerialFilter
from app.pagination import MyPageNumberPagination
from user.models import UserProfile
@ -17,9 +15,9 @@ from .utils import generate_token, decode_token_exp_time
logger = logging.getLogger('mylogger')
class ModelQuery(viewsets.ModelViewSet):
class XZNSHModelViewSet(viewsets.ModelViewSet):
# 查询类
queryset = TP.objects.all().order_by("-uid") # 按照uid倒序
queryset = XZNSH.objects.all().order_by("-uid") # 按照uid倒序
# 序列化类
serializer_class = SerialMyModel
# 分页类
@ -28,8 +26,8 @@ class ModelQuery(viewsets.ModelViewSet):
# 条件筛选
filterset_class = SerialFilter
def query_event(self, request, *args, **kwargs):
res = TP.objects.values('event_type').annotate(count=Count('event_type')).order_by('-count')
def get_events(self, request, *args, **kwargs):
res = self.queryset.values('event_type').annotate(count=Count('event_type')).order_by('-count')
result = list(res)
data = dict()
for index, item in enumerate(result, 1):
@ -43,7 +41,7 @@ class ModelQuery(viewsets.ModelViewSet):
class RegisterLoginViewSet(viewsets.ModelViewSet):
def tp_register(self, request, *args, **kwargs):
def register(self, request, *args, **kwargs):
"""注册 POST"""
# 判断用户是否为管理员
# user = request.user
@ -66,7 +64,7 @@ class RegisterLoginViewSet(viewsets.ModelViewSet):
class LoginView(viewsets.ModelViewSet):
def tp_login(self, request, *args, **kwargs):
def login(self, request, *args, **kwargs):
"""登录 POST"""
data = request.data
username = data.get('username')
@ -99,6 +97,6 @@ class LoginView(viewsets.ModelViewSet):
}
return Response(response)
def tp_logout(self, request, *args, **kwargs):
def logout(self, request, *args, **kwargs):
"""登出 GET"""
pass

@ -1,27 +0,0 @@
# Generated by Django 3.2.19 on 2023-06-30 16:19
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('event_name', models.CharField(default='', max_length=256, verbose_name='事件名')),
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
],
options={
'db_table': 'tp_event',
'ordering': ['-id'],
},
),
]

@ -9,5 +9,5 @@ class Event(models.Model):
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
class Meta:
db_table = 'tp_event'
db_table = 'xznsh_event'
ordering = ['-id']

@ -9,6 +9,8 @@ import logging
from rest_framework.response import Response
logger = logging.getLogger('mylogger')
class CheckTokenMiddleware(MiddlewareMixin):
def process_request(self, request):
# todo 登录时不需要校验token

@ -3,7 +3,7 @@
python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --ini /home/myproject/uwsgi.ini&&
echo 'TP项目启动完成'
echo 'XZNSH项目启动完成'
tail -f /dev/null
exec "$@"

@ -1,48 +0,0 @@
# Generated by Django 3.2.19 on 2023-06-30 16:19
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='UserProfile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('organization', models.CharField(blank=True, max_length=256, null=True, verbose_name='组织')),
('gender', models.IntegerField(choices=[(0, ''), (1, '')], default=1, verbose_name='性别')),
('phone_number', models.CharField(blank=True, max_length=12, null=True, verbose_name='手机号')),
('head_sculpture', models.CharField(blank=True, max_length=512, null=True, verbose_name='头像')),
('status', models.IntegerField(default=0, verbose_name='状态')),
('recorder_number', models.CharField(blank=True, max_length=256, null=True, verbose_name='执法记录仪编号')),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
],
options={
'db_table': 'tp_user',
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
]

@ -14,7 +14,7 @@ class UserProfile(AbstractUser):
recorder_number = models.CharField(max_length=256, verbose_name='执法记录仪编号', null=True, blank=True)
class Meta:
db_table = 'tp_user'
db_table = 'xznsh_user'

@ -262,13 +262,13 @@ l1 = [
l2 = []
from app.models import TP
from app.models import XZNSH
def import_data(data):
try:
for item in data:
TP.objects.create(**item)
XZNSH.objects.create(**item)
return
except Exception as e:
print(e)

Loading…
Cancel
Save