我在views.py文件中遇到Django Chartit
的问题,因为他找不到我的桌子。但是,此表存在于我的MySQL Database
。
我使用此模块是为了在我的Django网站上显示一些图形,这是我第一次使用它。
我的Person
应用程序中有一个名为Identity
的表格,如下所示:
class Person(models.Model):
title = models.CharField(max_length=12,choices=TITLE_CHOICES, verbose_name='Civilité')
young_girl_lastname = models.CharField(max_length=30, verbose_name='Nom de jeune fille', blank=True)
lastname = models.CharField(max_length=30, verbose_name='Nom de famille')
firstname = models.CharField(max_length=30, verbose_name='Prénom(s)')
sex = models.CharField(max_length=8, choices=SEX_CHOICES, verbose_name='Sexe')
birthday = models.DateField(verbose_name='Date de naissance')
birthcity = models.CharField(max_length=30, verbose_name='Ville de naissance')
birthcountry = CountryField(blank_label='Sélectionner un pays', verbose_name='Pays de naissance')
.....
在我的MySQL数据库中,我有这个:
mysql> show tables ;
+-------------------------------------+
| Tables_in_DatasystemsEC |
+-------------------------------------+
| BirthCertificate_birthcertificate |
| Configurations_theme |
| Identity_monthlyweatherbycity |
| Identity_person |
| Mairie_mairie |
| Recensement_attestation_recensement |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| log_userprofile |
+-------------------------------------+
您有Identity_person
作为表格。
在我看来,我定义了一个新函数,以便显示一些统计图形:
def Chartview(request) :
#Step 1: Create a DataPool with the data we want to retrieve.
ds = \
DataPool(
series=
[{'options': {
'source': Person.objects.raw(
"SELECT birthcountry, COUNT(birthcountry) as nombre FROM Person GROUP BY birthcountry")
},
'terms': [
'birthcountry',
'nombre']}
])
#Step 2: Create the Chart object
cht = Chart(
datasource = ds,
series_options =
[{'options':{
'type': 'column',
'stacking': False},
'terms':{
'birthcountry': [
'nombre']
}}],
chart_options =
{'title': {
'text': 'Nombre de naissances par pays'},
'xAxis': {
'title': {
'text': 'Pays de naissance'}}})
return render(request, 'statistics.html',{'birthcountrychart': cht})
但是我收到了这个错误:
(1146, "Table 'DatasystemsEC.Person' doesn't exist")
我不了解我必须更换的内容:Person.objects.raw
。
我试过了Identity_person.objects.raw
,但它没有用。
先谢谢你
编辑:
由于@ e4c5,我找到了另一种使用Django Aggregation进行查询的方法,并且效果非常好:
Person.objects.values('birthcountry').annotate(nombre = Count('birthcountry'))}
答案 0 :(得分:1)
我认为您应该将SQL编写为:
'source': Person.objects.raw(
"SELECT birthcountry, COUNT(birthcountry) as nombre FROM Identity_person GROUP BY birthcountry")
},
答案 1 :(得分:1)
在大多数安装中,Mysql表名称区分大小写。所有小写的标准django表命名法都是appname_tablename
,因此理想情况下你的模型中应该有以下内容:
class Meta:
db_table = 'Identity_person'
然后您的原始查询也应该具有正确的表名
SELECT birthcountry, COUNT(birthcountry) as nombre FROM Identity_person GROUP BY birthcountry
但我认为你应该在这里使用django聚合而不是原始查询。