2016-03-22 17 views
0

Ich möchte Statusdaten nach countryId filtern. in meinem models.py istSo filtern Sie nach ID

class Country(models.Model): 
    country_id=models.IntegerField(default=0) 
    country=models.CharField(max_length=50) 

    def __str__(self): 
     return self.country 

class State(models.Model): 
    state_id=models.IntegerField(default=0) 
    state=models.CharField(max_length=50) 
    countryid=models.ForeignKey(Country,default=1) 

    def __str__(self): 
     return self.state.encode('utf8') 

i die Liste zu bekommen os jene Staaten, deren countryid zu Variable gleich die URL passiert in meinem views.py

class StateViewset(viewsets.ModelViewSet): 
    queryset=State.objects.all() 
    serializer_class=StateSerializers 
    def list(self, request,*args): 
     count_id=request.GET.get("id") 
     data=State.objects.all() 
     serializer=StateSerializers(data,many=True) 
     state_data=State.objects.filter(countryid__country_id=count_id) 
     return Response(serializer.data) 

Mein Filter funktioniert nicht count_id ist ist vaiable, die ich in url.i jene Staaten wollen geben, die das Land gehören, die dountry id haben = count_id

+0

Sie sagen "nicht funktioniert"; Was meinst du damit? Gibt es einen Fehler? Zurückgeben eines leeren Abfrage-Sets? – Hamms

+0

Es gibt alle Daten der Zustände –

Antwort

0

Ohne zu wissen, die genauen Details, wie Ihr Programm "nicht funktioniert", kann ich nicht sicher sagen, was falsch ist, aber ich sehe ein Problem. bearbeiten: Jetzt wissen, dass Ihr Code alle Zustände statt der gefilterten Liste zurückgibt, denke ich, sehe ich das Problem. Schauen Sie genau auf Ihren Code:

data=State.objects.all() 
serializer=StateSerializers(data,many=True) 
state_data=State.objects.filter(countryid__country_id=count_id) 
return Response(serializer.data) 

Sie initialisieren data wie alle Staaten, dann erstellen Sie einen Serializer aus diesen Daten. Sie erstellen dann ein gefiltertes Abfrage-Set Ihrer States und schließlich eine Antwort, die aus dem ersten Satz der Daten gebildet wird.

Mit anderen Worten, Sie verwenden Ihr gefiltertes Abfrage-Set nie wirklich.

Funktioniert Folgendes?

state_data = State.objects.filter(countryid__country_id=count_id) 
serializer = StateSerializers(state_data, many=True) 
return Response(serializer.data) 
+0

Es wirft einen Fehler keine solche Spalte city_country.country_id hier Stadt ist App-Name –

+0

Ein Datenbankfehler oder ein Django-Fehler? Mit anderen Worten, ist das Problem, dass Ihr Modell falsch ist oder dass Ihre Datenbank nicht genau Ihr Modell widerspiegelt? – Hamms

+0

Es zeigt keine Daten.blank kommt –

0

Try this:

... 
state_data=State.objects.filter(countryId__countryId=count_id) 
... 
+0

es funktioniert nicht –

+0

@CpVerma Ich bearbeitete die Antwort. Bitte versuche es erneut. – Gocht

+0

es funktioniert nicht bro ... Ihre Antwort ich gleiche shang wang ... –

0

Versuchen Sie queryset=State.objects.get(id=count_id).

0

Sie könnten tun:

state_data=State.objects.filter(countryId__countryId=count_id) 

By the way, sollten Sie wirklich auf dem Feldnamen arbeiten, countryId in Modell State sollte country sein, denn sonst ist es der gleiche Feldname wie countryId in Country Modell. Auch Python-Klassenfelder sollten mit Unterstrichen in Kleinbuchstaben geschrieben werden, daher benötigen Sie möglicherweise country_id, um Ihren Codestil zu verbessern.