Django Chartit原始查询不存在表

时间:2017-03-09 09:15:20

标签: python mysql django charts

我在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'))}

2 个答案:

答案 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聚合而不是原始查询。