簡體   English   中英

如何編寫python-django查詢,最終將通過django調用這些查詢

[英]How to write python-django queries which is ultimately going to call these queries from django

我想編寫所有類型的復雜查詢,例如:

如果有人希望“浦那區”中“水果”是“番石榴”的信息,那么他們將獲得浦那區中番石榴的數據。

htt//api/?fruit=Guava&?district=Pune

如果有人希望“ Girnare Taluka”中的“水果”信息是“番石榴”,那么他們將獲得girnare taluka中番石榴的數據。

htt://api/?fruit=Guava&?taluka=Girnare

如果有人想要“水果”的信息是“番石榴”和“香蕉”,那么他們將只獲得這兩個水果的所有數據,就像

htt://api/?fruit=Guava&?Banana

但是,當我運行服務器時,我無法獲得正確的輸出。如果我使用http://api/?fruit=Banana那么我將獲得有關香蕉,石榴,番石榴等水果的所有數據,而不是僅為香蕉得到水果的數據。 所以我很困惑這里發生的事情。 能否請您檢查我的代碼,我在哪里弄錯了? *這是我的所有文件

models.py

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 get_wbcis(fruit=None, district=None, talkua=None, revenue_circle=None, sum_insured=None, area=None,min_farmer=None, max_farmer=None, limit=100):

    query = Wbcis.objects.all()

    if fuit is not None:

        query = query.filter(Fruit=fruit)

    if district is not None:

        query = query.filter(District=district)

    if taluka is not None:

        query = query.filter(Taluka=taluka)

    if revenue_circle is not None:

        query = query.filter(Revenue_circle= revenue_circle)

    if sum_insured is not None:

        query = query.filter(Sum_Insured=sum_Insured)

    if area is not None:

        query = query.filter(Area=area)

    if min_farmer is not None:

        query = query.filter(Farmer__gte=min_farmer)

    if max_farmer is not None:

        query = query.filter(Farmer__lt=max_farmer)
    return query[:limit]

Views.py

class WbcisViewSet(ModelViewSet):

    queryset = Wbcis.objects.all()

    serializer_class = WbcisSerializer


def wbcis_view(request):

    fruit = request.GET.get("fruit")

    district = request.GET.get("district")

    taluka = request.GET.get("taluka")

    revenue_circle = request.GET.get("revenue_circle")

    sum_insured = request.GET.get("sum_insured")

    area = request.GET.get("area")

    min_farmer = request.GET.get("min_farmer")

    max_farmer = request.GET.get("max_farmer")

    wbcis = get_wbcis(fruit, district, taluka,revenue_circle,sum_insured,area, min_farmer, max_farmer)


    #convert them to JSON:

    dicts = []

    for wbci in wbcis:

        dicts.append(model_to_dict(wbci))

    return JsonResponse(dicts)

Serializers.py

from rest_framework.serializers import ModelSerializer

from WBCIS.models import Wbcis



class WbcisSerializer(ModelSerializer):


    class Meta:

        model = Wbcis

        fields=('id','Fruit','District','Sum_Insured','Area','Farmer','Taluka','Revenue_circle',)

調用這些查詢以獲取准確的輸出需要對此代碼進行哪些更改?

我不認為您實際上是在調用該視圖,根據您的使用情況判斷,我認為您是在調用視圖集本身,然后忽略了查詢參數。

您應遵循drf docs進行過濾,但從本質上講,應為視圖集提供get queryset方法,並在該視圖中包含當前視圖中包含的代碼

class WbcisViewSet(ModelViewSet):

    queryset = Wbcis.objects.all()  # Shouldn't need this anymore

    serializer_class = WbcisSerializer


    def get_queryset(self):

        fruit = self.request.query_params.get("fruit")
        ....
        return get_wbscis(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM