获取模型字段作为字符串

时间:2017-01-19 21:58:54

标签: python django django-queryset

我刚刚开始学习Django框架,我在理解如何将Django Model字段作为字符串时遇到了一些麻烦。模型(MapArea)successfully retrieves data from the database,但我需要将部分数据转换为字符串,以便将其JSON格式解析为列表。我需要转换为字符串的字段设置为streets = models.CharField(max_length=2000)

这是我的Model类:

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

现在,我尝试使用custom template filter来调用我的模型(MapArea)中的方法,因为我似乎无法弄清楚如何将数据转换为字符串转让:

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

然后我将我的模板用作{{ maparea|get_streets:maparea.streets }},这给了我错误get_streets() takes 1 positional argument but 2 were given

理想情况下,我希望能够在分配街道之前转换数据。例如:

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

我不确定整个查询模型系统是否可能来自我正在尝试的内容。

所以我的问题是:如何将CharField数据作为字符串使用我的列表转换方法(get_streets())以便在我的模板中使用?

提前谢谢你。如果这令人困惑,我道歉。这里有两个问题。如果您需要任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:4)

在Django中,模型实例上的db访问看起来像普通的属性访问。 ORM在后台处理db查询。

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

如果您是Django的新手,但已经熟悉Python,那么您可能希望在此处访问self.streets将返回models.CharField实例。但实际上它返回一个字符串,因为基类models.Model对子类上定义的字段进行了一些处理。