簡體   English   中英

如何從模型訪問屬性到Django Queryset?

[英]How to access property from models into Django Queryset?

我在這個模型中創建了一個屬性來格式化DateTimeField。 但是我無法訪問/引用它。 到目前為止已經嘗試過:

class DataForecast(models.Model):
    date_time = models.DateTimeField()
    rainfall_mm_per_10_min = models.FloatField(null=True)
    wl_observed_m = models.FloatField(null=True)
    wl_forecasted_m = models.FloatField(null=True)

    def __unicode__(self):
        return self.date_time

    @property
    def date_time_formatted(self):
        import datetime
        return self.date_time.strftime('%b %d, %Y %I:%M %p')

而在我的views.py中:

formatted = [dataforecast.date_time_formatted for dataforecast in DataForecast.objects.all()]
getall = DataForecast.objects.all().values_list(formatted, "rainfall_mm_per_10_min", "wl_observed_m","wl_forecasted_m")
return HttpResponse(json.dumps(list(getall),cls=DjangoJSONEncoder), content_type='application/json')

它返回一個錯誤:

異常值:“列表”對象沒有屬性“分割”

有兩種方法可以做到這一點:

添加.values()

DataForecast.objects.all().values()

會給您一個列表以進行迭代。

否則請記住輸出是一個對象,因此請使用object.key表示法獲取值

values/values_list僅采用可選的字段參數。 他們不會將查詢集作為參數。

在返回值中設置unicode

def __unicode__(self):
    return unicode(self.date_time)

你可以直接做

In [6]: DataForecast.objects.all().values("date_time", "rainfall_mm_per_10_min", "wl_observed_m","wl_forecasted_m")
Out[6]: [{'date_time': datetime.datetime(2015, 3, 27, 6, 5, 36, tzinfo=<UTC>), 'wl_forecasted_m': 2.0, 'rainfall_mm_per_10_min': 1.0, 'wl_observed_m': 2.0}, {'date_time': datetime.datetime(2001, 1, 1, 0, 0, tzinfo=<UTC>), 'wl_forecasted_m': None, 'rainfall_mm_per_10_min': None, 'wl_observed_m': None}]

或更好地嘗試

In [7]: DataForecast.objects.all().values()
Out[7]: [{'wl_observed_m': 2.0, 'date_time': datetime.datetime(2015, 3, 27, 6, 5, 36, tzinfo=<UTC>), 'wl_forecasted_m': 2.0, u'id': 5, 'rainfall_mm_per_10_min': 1.0}, {'wl_observed_m': None, 'date_time': datetime.datetime(2001, 1, 1, 0, 0, tzinfo=<UTC>), 'wl_forecasted_m': None, u'id': 6, 'rainfall_mm_per_10_min': None}]

轉換為json

In [19]: all = DataForecast.objects.all().values()

In [20]: all
Out[20]: [{'wl_observed_m': 2.0, 'date_time': datetime.datetime(2015, 3, 27, 6, 5, 36, tzinfo=<UTC>), 'wl_forecasted_m': 2.0, u'id': 5, 'rainfall_mm_per_10_min': 1.0}, {'wl_observed_m': None, 'date_time': datetime.datetime(2001, 1, 1, 0, 0, tzinfo=<UTC>), 'wl_forecasted_m': None, u'id': 6, 'rainfall_mm_per_10_min': None}]

In [21]: for i in all: i['date_time'] =  i['date_time'].strftime("%b %d %Y %H:%M:%S")

In [22]: all
Out[22]: [{'wl_observed_m': 2.0, 'date_time': 'Mar 27 2015 06:05:36', 'wl_forecasted_m': 2.0, u'id': 5, 'rainfall_mm_per_10_min': 1.0}, {'wl_observed_m': None, 'date_time': 'Jan 01 2001 00:00:00', 'wl_forecasted_m': None, u'id': 6, 'rainfall_mm_per_10_min': None}]

In [23]: import json

In [25]: json.dumps(list(all))                                                                                                                                                  
Out[25]: '[{"wl_observed_m": 2.0, "date_time": "Mar 27 2015 06:05:36", "wl_forecasted_m": 2.0, "id": 5, "rainfall_mm_per_10_min": 1.0}, {"wl_observed_m": null, "date_time": "Jan 01 2001 00:00:00", "wl_forecasted_m": null, "id": 6, "rainfall_mm_per_10_min": null}]'

暫無
暫無

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

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