2017-01-19 14 views
1

最近私はDjangoフレームワークを学び始めました.Django Modelフィールドを文字列として取得する方法を理解するのに少し問題があります。モデル(MapArea)successfully retrieves data from the databaseが、JSON形式の形式をリストに解析するために、データの一部を文字列に変換する必要があります。モデルフィールドを文字列として取得

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 

今、私は私のモデル(MapAreaでメソッドを呼び出すためにcustom template filterを使用しようとしている:私は、文字列に変換する必要があるフィールドは、ここでstreets = models.CharField(max_length=2000)

は私のモデルクラスであるとして設定されています)、私は割り当てにデータを文字列に変換する方法を見つけ出すように見えることはできませんので:

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

そして、これは私にエラーget_streets() takes 1 positional argument but 2 were givenを与える{{ maparea|get_streets:maparea.streets }}としての私のテンプレートを、使用されています。

理想的には、通りを割り当てる前にデータを変換することができます。例:

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

私が試みてきたことから、クエリシステム全体のモデルシステムで可能かどうかはわかりません。

私の質問は、どのように私のテンプレートで使用するリスト変換方法(get_streets())でそれを使用するための文字列としてCharFieldデータを取得できますか?

ありがとうございます。これが混乱している場合はお詫び申し上げます。ここでは2つの問題の一種が続きます。追加情報が必要な場合はお知らせください。

+0

あなたが何を求めているのか分かりません。 'streets'はCharFieldなので、その中にあるものはすでに文字列です。テンプレートフィルタは必要ありません。 –

答えて

4

Djangoでは、モデルインスタンスのdbアクセスは通常の属性アクセスのように見えます。 ORMはあなたのためにdbクエリーを処理します。

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

あなたはジャンゴに新しいですが、すでにPythonの持ついくつかの経験を持っている場合は、ここでself.streetsにアクセスするmodels.CharFieldインスタンスを返すことが期待されていることがあります。しかし、基本クラスmodels.Modelは、サブクラスで定義されたフィールドの処理を行うため、実際には文字列を返します。

関連する問題