vue前端和Django後端如何查詢一定時間段內的數據
前言
在開發過程中經常會遇到篩選查詢之類的功能,比如查詢某一個時間段內的數據而非所有數據。
這樣我們就需要向後端發送時間段的參數,然後在後端處理查詢。
這裡以Django後端和vue前端的簡單例子來記錄大致實現。
後端數據庫
這裡是一些簡單的數據重要的是date,我們需要根據日期來篩選返回到前端。
models.py
class CountDownSign(models.Model): name = models.CharField(max_length=1000) date = models.DateField() sign = models.CharField(max_length=200)
serializers.py
這裡引入的是drf框架,但篩選查詢的思路和這個框架沒有關系。
class CountDownModelSerializer(serializers.ModelSerializer): class Meta: model = CountDownSign fields = '__all__' def create(self, validated_data): return CountDownSign.objects.create(**validated_data) def update(self, instance, validated_data): instance.name = validated_data.get('name', instance.name) instance.date = validated_data.get('date', instance.date) instance.sign = validated_data.get('sign', instance.sign) instance.save() return instance
views.py
為篩選查詢提供接口。拿到前端傳遞的起止日期。核心代碼如下
obj = models.CountDownSign.objects.filter(date__range=(start, end))
class CountDownViewSet(ModelViewSet): parser_classes = [JSONParser, FormParser] """視圖集""" queryset = models.CountDownSign.objects.all() serializer_class = CountDownModelSerializer # 搜索 search_fields = ('id', 'name', 'sign', 'date') @action(methods=['post'], detail=False) def getSE(self, request, *args, **kwargs): start = request.data.get('start', None) end = request.data.get('end', None) if start and end: obj = models.CountDownSign.objects.filter(date__range=(start, end)) if obj: ser = CountDownModelSerializer(instance=obj, many=True) print(ser.data) return JsonResponse({ 'code': '200', 'msg': '獲取數據成功', 'data': ser.data }) else: return JsonResponse({ 'code': '1002', 'msg': '獲取失敗', }) else: return Response(status=status.HTTP_204_NO_CONTENT)
前端界面
這裡簡略給出用於接收起止時間的兩個date-picker,並且給搜索綁定事件。
<div class="datePicker"> <div class="block" style="float: left"> <el-date-picker v-model="value1" type="datetime" value-format="yyyy-MM-dd" placeholder="請選擇選擇開始日期"> </el-date-picker> </div> <div class="block" style="float: left; margin-left: 20px;"> <el-date-picker v-model="value2" type="datetime" value-format="yyyy-MM-dd" placeholder="請選擇截止日期"> </el-date-picker> </div> <el-button round style="float: left; margin-left: 20px;" @click="searchC">搜索</el-button> </div>
data.js
實現的接口函數
export function searchCountDown(start, end) { return request({ url: 'countDown/getSE/', method: 'post', data: { start: start, end: end } }) }
點擊事件的實現
判斷輸入的合法性,並接受數據進行數據綁定展示
searchC() { console.log(this.value1); console.log(this.value2); if (this.value1 < this.value2) { searchCountDown(this.value1, this.value2).then(res => { console.log(res.data); this.searchRes = res.data; }) } else { this.$message.error("時間范圍出錯"); } },
數據展示
<div class="article"> <ul> <li v-for="(item,index) in searchRes"> <div class="ui grid" style="width: 100%;height: 60px;"> <div class="four wide column"><span>{{ item.name }}</span></div> <div class="four wide column"><span>{{ item.date }}</span></div> <div class="four wide column"><span>{{ item.sign }}</span></div> <div class="four wide column"> <el-button type="danger" icon="el-icon-delete" circle @click="deleteC(item.id)"></el-button> <el-button type="primary" icon="el-icon-edit" circle></el-button> </div> </div> <div class="ui divider"></div> </li> </ul>
運行結果
可以看到返回的數據均是在時間范圍內,這裡的2月25號零時其實返回的數據是2月5號,因為進行瞭數據格式化,所以25號的數據也被返回瞭。
總結
到此這篇關於vue前端和Django後端如何查詢一定時間段內數據的文章就介紹到這瞭,更多相關vue和Django查詢數據內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Django後端按照日期查詢的方法教程
- Django點贊的實現示例
- python Django實現增刪改查實戰代碼
- Django細致講解多對多使用through自定義中間表方法
- Django數據庫(SQlite)基本入門使用教程