首页 > 解决方案 > 为什么 Django 在遗留数据库的表名中添加一个额外的字符?

问题描述

我正在关注this_site以加入旧数据库。但是,无论使用哪种方法,Django 都会向遗留 sqlite 数据库中的唯一表(表:Dogs)添加一个额外的字符(一个 s)。

额外字符的截图如下:

在此处输入图像描述

下面是我的整个models.py。

通过python的sqlite库访问数据库我可以查询表'dogs'并获得预期的结果,因为查询'dogss'会产生错误“没有这样的表:dogss”。

from django.db import models
from datetime import datetime

# Create your models here.

class Tutorial(models.Model):
    tutorial_title = models.CharField(max_length=200)
    tutorial_content = models.TextField()
    tutorial_published = models.DateTimeField('date published', default=datetime.now())

    def __str__(self):
        return self.tutorial_title

class Dogs(models.Model):
    #id = models.AutoField(primary_key=True)
    date_of_death = models.TextField(db_column='Date of Death', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    land_of_birth = models.TextField(db_column='Land of Birth', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    registered_name = models.TextField(db_column='Registered Name', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    call_name = models.TextField(db_column='Call Name', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    breeder_name = models.TextField(db_column='Breeder_name', blank=True, null=True)  # Field name made lowercase.
    registration_field = models.TextField(db_column='Registration#', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters. Field renamed because it ended with '_'.
    land_of_standing = models.TextField(db_column='Land of Standing', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    dam = models.TextField(db_column='Dam', blank=True, null=True)  # Field name made lowercase.
    known_offspring = models.TextField(db_column='Known Offspring', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    colour = models.TextField(db_column='Colour', blank=True, null=True)  # Field name made lowercase.
    breeder = models.TextField(db_column='Breeder', blank=True, null=True)  # Field name made lowercase.
    kennel = models.TextField(db_column='Kennel', blank=True, null=True)  # Field name made lowercase.
    owner_name = models.TextField(db_column='Owner_name', blank=True, null=True)  # Field name made lowercase.
    weight = models.TextField(db_column='Weight', blank=True, null=True)  # Field name made lowercase.
    sire = models.TextField(db_column='Sire', blank=True, null=True)  # Field name made lowercase.
    did = models.IntegerField(blank=True, null=True)
    sex = models.TextField(db_column='Sex', blank=True, null=True)  # Field name made lowercase.
    titles = models.TextField(db_column='Titles', blank=True, null=True)  # Field name made lowercase.
    date_of_birth = models.DateTimeField(db_column='Date of Birth', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    owner = models.TextField(db_column='Owner', blank=True, null=True)  # Field name made lowercase.
    distinguishing_features = models.TextField(db_column='Distinguishing Features', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    size = models.TextField(db_column='Size', blank=True, null=True)  # Field name made lowercase.

    def __str__(self):
        return self.registered_name

    class Meta:
        managed = False
        db_table = 'dogs'
        app_label = 'dogs'

标签: djangopython-3.8

解决方案


这是 Django 中的默认显示,没有指定 a verbose_name_plural,您可以在此处获得文档https://docs.djangoproject.com/en/3.0/ref/models/options/

使用单数名称命名表是标准做法,因此默认情况下 Django 添加一个s以显示表中存在的项目列表。以下是有关此主题的讨论:表命名困境:单数与复数名称

(在Tutorial表格的情况下,您可能也tutorials显示过)


推荐阅读