属性错误:模块'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)

My views to put data to 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>

url .py如下:

urlpatterns = [
path('', views.index, name='index'),
path('update/<str:city_name>/<int:id>', views.update, name='update'),

和视图更新如下:那里我想通过getattr获取模型,但django db。模型不搜索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: module 'django.db. js。models'没有属性'Aqtau'

您需要将模型导入到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

我不知道你为什么使用这个方法getattr个人而言,我在更新方法中使用get_object_or_404函数它将抛出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)  

注意,您应该在更新方法中包含模型表单类,以绘制模型属性的表单,您可以在此链接中看到完整的文档