/'str'对象的AttributeError没有属性'对象'

时间:2018-06-13 22:25:41

标签: django

我是Django的新手。我正在开发一个使用天气API来获取天气的项目。一切正常,直到models.py制作并在views.py上导入城市

我用ver。 13年1月11日

models.py

  from __future__ import unicode_literals

  from django.db import models

  class city(models.Model):
  name = models.CharField(max_length=25)

  def __str__(self):
      return self.name

  class Meta:
        verbose_name_plural ='cities'

views.py(错误来自cities = city.objects.all())

import requests

from django.shortcuts import render
from .models import city

def index(request):
  url= 'http://api.openweathermap.org/data/2.5/weather?q={}& units=imperial&appid=e1a2ef38103d2e572d316e38452e2acd'
  city = 'Lucknow'

  cities = city.objects.all()

  weather_data =[]

  for city in cities:


    r= requests.get(url.format(city)).json()


    city_weather = {
         'city':city.name ,
         'temperature' :r['main']['temp'],
         'description' :r['weather'][0]['description'],
         'icon' :r['weather'][0]['icon'] ,
    }
    weather_data.append(city_weather)

    print(weather_data)

context = {'weather_data' : city_weather}

return render(request,'weather/weather.html', context)

2 个答案:

答案 0 :(得分:1)

index函数中,您写道:

def index(request):
    url= 'http://api.openweathermap.org/data/2.5/weather?q={}& units=imperial&appid=e1a2ef38103d2e572d316e38452e2acd'
    city = 'Lucknow'

    cities = city.objects.all()
    # ...

因此,您在此处将city定义为本地作用域变量,并使用字符串值。快速修复是重命名字符串,如:

def index(request):
    url= 'http://api.openweathermap.org/data/2.5/weather?q={}& units=imperial&appid=e1a2ef38103d2e572d316e38452e2acd'
    city_ = 'Lucknow'

    cities = city.objects.all()
    # ...
    # use city_ for the string element

但是,一个班级通常以大写字母开头,所以我建议重命名你的班级City而不是city

此外,我发现您定义此字符串很奇怪,因为现在在视图中,您应该使用它。 url.format(..)应该使用查询集中city.name对象的City

答案 1 :(得分:0)

解决此问题。

对于动态表名,您可以使用

 table_name = 'MyTable'
 model = getattr(YOURAPP.models, table_name)
 model.objects.all()