Создание формы модели внутри listview в Django с помощью CBV
Привет, я изучаю django, создавая приложение погоды. Я не знаю, как правильно это сделать. Мне нужна форма в listview для добавления города пользователю и я использую CBV. Но форма не присутствует на сайте. Что мне делать?
views.py
from urllib import request
from django.shortcuts import render
import requests
from datetime import datetime
from .models import City
from pytz import timezone
from django.views.generic import ListView
from .forms import CityForm
from django.views.generic.edit import FormMixin, FormView
class Cities(FormMixin,ListView):
model=City
template_name='home.html'
form_class=CityForm
success_url='/'
def get_context_data(self, *, object_list=None, **kwargs):
context =super(Cities, self).get_context_data(**kwargs)
weather_data=[]
for city in City.objects.all():
url=f'https://api.openweathermap.org/data/2.5/weather?q={city}'
data=requests.get(url).json()
if data["cod"] != "404":
now_asia =datetime.fromtimestamp(data['timezone']).strftime('%a,%b %d %Y')
payload={ 'city':data['name'],
'weather':data['weather'][0]['main'],
'icon':data['weather'][0]['icon'],
'fahrenheit':data['main']['temp'],
'celsius':int(data['main']['temp']-273),
'pressure':data['main']['pressure'],
'humidity':data['main']['humidity'],
'description':data['weather'][0]['description'],
'date' :now_asia,
}
weather_data.append(payload)
else:
weather_data={'invalid_city':f'{city} City not found.\n Enter valid city'}
print(context)
context={'weather_data':weather_data}
return context
forms.py
from django.forms import ModelForm
from .models import City
class CityForm(ModelForm):
class Meta:
model=City
fields=['name']
home.html
{% csrf_token %}
{{form}}
<button class="btn" type="submit" >Add city</button>
введите описание изображения здесь
В get_context_data изменение в конце
context['weather_data'] = weather_data
return context
Вы просто хотите добавить еще один ключ, но не перезаписывать весь контекст