2017-01-19 7 views
1

Ich habe gerade erst angefangen zu lernen, das Django-Framework, und ich habe ein bisschen Schwierigkeiten zu verstehen, wie man ein Django-Modell-Feld als String erhalten. Das Model (MapArea) successfully retrieves data from the database, aber ich muss Teile der Daten in Strings konvertieren, um sein JSON-ähnliches Format in Listen zu parsen. Das Feld I in eine Zeichenfolge konvertieren wird als streets = models.CharField(max_length=2000)Get Model-Feld als String

Hier ist meine Modellklasse:

class MapArea(models.Model): 
    country = models.CharField(max_length=500) 
    state = models.CharField(max_length=500) 
    city = models.CharField(max_length=500) 
    name = models.CharField(max_length=500) 
    lat = models.DecimalField(max_digits=15,decimal_places=6) 
    lon = models.DecimalField(max_digits=15,decimal_places=6) 
    streets = models.CharField(max_length=2000)` 

    def __str__(self): 
     return self.name 

    # Meta 
    class Meta: 
     abstract = True 

    # Do stuff with a string of street data from the database 
    def get_runways(streets): 
     return streetList 

Gerade jetzt, ich bin versucht, ein custom template filter zu verwenden, um das Verfahren in meinem Modell zu nennen (MapArea), weil ich nicht herausfinden können scheinen, wie die Daten in einen String auf Zuordnung zu konvertieren:

@register.filter(name = 'get_streets') 
def get_streets(obj, streets): 
    return obj.get_streets(streets) 

dann Dies wird meine Vorlage als {{ maparea|get_streets:maparea.streets }} verwendet, die mir den Fehler get_streets() takes 1 positional argument but 2 were given gibt.

Idealerweise möchte ich einfach die Daten vor dem Zuweisen von Straßen konvertieren können. Zum Beispiel:

streets = get_streets(models.CharField(max_length=2000)) # Somehow converted to a string to use with the method 

Ich bin nicht sicher, dass das mit dem gesamten Abfrage-Modell-System von dem, was ich versucht habe, möglich ist.

Also meine Frage ist: Wie kann ich die CharField-Daten als eine Zeichenfolge, um es mit meiner List-Konvertierungsmethode (get_streets()) für die Verwendung in meiner Vorlage verwenden?

Vielen Dank im Voraus. Ich entschuldige mich, wenn das verwirrend ist. So gehen zwei Ausgaben weiter. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

+0

Ich bin mir nicht sicher, was Sie fragen. 'streets' ist ein CharField, also ist alles, was darin enthalten ist, bereits eine Zeichenkette - keine Notwendigkeit für einen Template-Filter. –

Antwort

4

In Django sieht der DB-Zugriff auf eine Modellinstanz nur wie normaler Attributzugriff aus. Das ORM behandelt die db-Abfragen für Sie hinter den Kulissen.

def get_runways(self): 
    # you can directly access "self.streets" attribute on the model instance 
    return something 

Wenn Sie Django neu sind, aber einige Erfahrung mit Python haben bereits, haben Sie erwartet, dass self.streets hier Zugriff zurückkehren würde eine models.CharField Instanz. Tatsächlich wird jedoch eine Zeichenkette zurückgegeben, da die Basisklasse models.Model einige der in der Unterklasse definierten Felder verarbeitet.