AttributeError: модуль 'django.db.models' не имеет атрибута 'Aqtau'
Я работаю с django в первый раз. И столкнулся с этой ошибкой. Можете ли вы помочь мне решить ее. Ошибка такая, у меня есть много моделей и данных в них, и я поместил эти данные в html как таблицу, после я хочу изменить значения в данных, но в представлениях я не могу искать мои модели
Мои модели py выглядят так: (в city_name я поместил название модели там это Aqtau )
from django.db import models
class Aqtau(models.Model):
city_name = models.CharField(max_length=255)
KT_by_projects_10g = models.CharField(max_length=255)
KT_by_projects_100g = models.CharField(max_length=255)
KT_on_facts_10g = models.CharField(max_length=255)
KT_on_facts_100g = models.CharField(max_length=255)
Мои представления для размещения данных в html:
def index(request):
Aqtau_city = Aqtau.objects.all().values()
template = loader.get_template('index.html')
context = {
'Aqtau_city': Aqtau_city,
}
return HttpResponse(template.render(context, request))
HTML выглядит следующим образом:
<tr>
{% for x in Aqtau_city %}
<td>Aqtau</td>
<td>{{ x.KT_by_projects_10g }} </td>
<td>{{ x.KT_by_projects_100g }} </td>
<td>{{ x.KT_on_facts_10g }} </td>
<td>{{ x.KT_on_facts_100g }} </td>
<td><a href="update/{{ x.city_name }}/{{ x.id }}">update</a></td>
{% endfor %}
</tr>
urls.py выглядит следующим образом:
urlpatterns = [
path('', views.index, name='index'),
path('update/<str:city_name>/<int:id>', views.update, name='update'),
А представления обновляются как: Там я хочу получить модель через getattr, но django db.models не ищет класс Aqtau.
def update(request, city_name, id):
model = getattr(models, city_name)
mymember = model.objects.get(id=id)
template = loader.get_template('update.html')
context = {
'mymember': mymember,
}
return HttpResponse(template.render(context, request))
Ошибка следующего вида
model = getattr(models, city_name)
AttributeError: модуль 'django.db.models' не имеет атрибута 'Aqtau'
Я не знаю, почему вы используете этот метод getattr лично я использую функцию get_object_or_404 в методе update, она выдает исключение 404, если модель не найдена
from django.shortcuts import get_object_or_404
def update(request, city_name, id):
obj = get_object_or_404(Aqtau, id=id)
context = {
"object": obj
}
return render(request, "update.html", context)
Примечание: вы должны включить класс формы модели в метод update для рисования формы атрибутов модели, полную документацию вы можете посмотреть в этой ссылке
Вам нужно импортировать вашу модель в файл view.py вместо использования getattr(models, city_name)
примерно так:
from apps.city_app.models import Aqtau
После этого вы сможете получить объекты этой модели, как показано ниже:
mymember = Aqtau.objects.get(id=id)
Также я предлагаю использовать 'get_object_or_404' для выборки, потому что это предотвратит ошибку DoesNotExist:
mymember = get_object_or_404(Aqtau, id=id)
Если вы хотите использовать 'get_object_or_404', вы можете импортировать его, как показано ниже:
from django.shortcuts import get_object_or_404