数据:
{
"Fruit": "Pomegranate",
"District": "Nasik",
"Taluka": "Nasik",
"Revenue circle": "Nasik",
"Sum Insured": 28000,
"Area": 1200,
"Farmer": 183
}
{
"Fruit": "Pomegranate",
"District": "Jalna",
"Taluka": "Jalna",
"Revenue circle": "Jalna",
"Sum Insured": 28000,
"Area": 120,
"Farmer": 13
}
{
"Fruit": "Guava",
"District": "Pune",
"Taluka": "Haveli",
"Revenue circle": "Uralikanchan",
"Sum Insured": 50000,
"Area": 10,
"Farmer": 100
}
{
"Fruit": "Guava",
"District": "Nasik",
"Taluka": "Girnare",
"Revenue circle": "Girnare",
"Sum Insured": 50000,
"Area": 75,
"Farmer": 90
}
{
"Fruit": "Banana",
"District": "Nanded",
"Taluka": "Nandurbar",
"Revenue circle": "NandedBK",
"Sum Insured": 5000,
"Area": 2260,
"Farmer": 342
}
{
"Fruit": "Banana",
"District": "Jalgaon",
"Taluka": "Bhadgaon",
"Revenue circle": "Bhadgaon",
"Sum Insured": 5000,
"Area": 220,
"Farmer": 265
}我想要写所有类型的组合查询,如果有人只想要水果的信息--即番石榴--那么输出将仅仅是番石榴的精确数据。
另外,如果有人只想要水果的信息,即香蕉和番石榴,那么输出将是香蕉和番石榴的精确数据。
如果水果等于香蕉
output will be data for Banana如果水果等于番石榴
output will be data for Guava如果水果等于香蕉和番石榴
output will be data for Banana and Guava另外,如果有人只想要地区的信息,也就是Nasik,那么输出将是Nasik地区的精确数据。对“地区”的质疑
如果地区等于Nasik
output will be data for Nasik District如果区与南德相等
output will be data for Nanded District同样,还有对"Revenue_circle、Farmer等“的查询。
我知道如何使用find在mongoshell中编写这个查询。
db.collections.find({"District":"Nasik"})等..。
但是我想在python脚本中编写查询。
你能帮我解决这个问题吗?有什么暗示吗?
我试着用Models.py文件编写
from django.contrib.auth.models import User
from django.db import models
from django.db.models import Q
class Wbcis(models.Model):
Fruit = models.CharField(max_length=50)
District = models.CharField(max_length=50)
Taluka = models.CharField(max_length=50)
Revenue_circle = models.CharField(max_length=50)
Sum_Insured = models.FloatField()
Area = models.FloatField()
Farmer = models.IntegerField()
def __str__(self):
return self.Fruit
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
class Meta:
verbose_name_plural = 'wbcis'
from models import Wbcis
Guava =Wbcis.objects.filter(Q(Fruit='Guava'))
print Guava
Banana= Wbcis.objects.filter(Q(Fruit='Banana'))
print Banana
Pomegranate= Wbcis.objects.filter(Q(Fruit='Pomegranate'))
print Pomegranate
Guava_Banana=Wbcis.objects.filter(Q(Fruit='Guava')&Q(Fruit='Banana'))
print Guava_Banana
Guava_Pomegranate=Wbcis.objects.filter(Q(Fruit='Guava')&Q(Fruit='Pomegranate'))
print Guava_Pomegranate我试着用Views.py写
from rest_framework.viewsets import ModelViewSet
from WBCIS.serializers import WbcisSerializer
from WBCIS.models import Wbcis
from rest_framework.filters import SearchFilter
from django.db.models import Q
class WbcisViewSet(ModelViewSet):
queryset = Wbcis.objects.all()
serializer_class = WbcisSerializer
filter_backends=[SearchFilter]
search_fields=['Fruit','District','Sum_Insured','Area','Farmer','Taluka','Revenue_circle','id']
def get_queryset(self, *args, **kwargs):
queryset_list =Wbcis.objects.all()
queryset_list1 =Wbcis.objects.all()
query =self.request.GET.get("Fruit")
query1=self.request.GET.get("District")
query2=self.request.GET.get("Taluka")
if query and query1:
queryset_list = queryset_list.filter(
Q(Fruit__icontains=query)
|Q(Distirct__icontains=query1)
)
return queryset_list
elif query1:
queryset_list1 = queryset_list.filter(
Q(District__icontains=query1)
)
return queryset_list1
elif query:
queryset_list1 = queryset_list.filter(
Q(Fruit__icontains=query)
)
return queryset_list1
elif query and query2:
queryset_list2 = queryset_list.filter(
Q(Fruit__icontains=query)&
Q(Taluka__icontains=query2)
)
return queryset_list2
return Wbcis.objects.all()这样做对吗?或者需要修改models.py和views.py文件?
发布于 2016-12-20 07:39:50
您将希望在django中创建一个模型,以便您可以使用django的ORM轻松地访问数据。以下是关于Django模型的一些信息
在上述情况下,您的模型如下:
class Item(models.Model):
Fruit = models.CharField(max_length=60)
District = models.CharField(max_length=60)
Taluka = models.CharField(max_length=60)
RevenueCircle = models.CharField(max_length=60)
SumInsured = models.IntegerField()
Area = models.IntegerField()
Farmer = models.IntegerField()然后您就可以执行如下的查询:
from models import Item
guava_items = Item.objects.filter(fruit='Guava')
print guava_items
# Out: [<guava item>, <guava item>, ...]https://stackoverflow.com/questions/41236996
复制相似问题