Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django遗留数据库检查数据库删除_id";字段名的后缀_Python_Django_Inspectdb - Fatal编程技术网

Python Django遗留数据库检查数据库删除_id";字段名的后缀

Python Django遗留数据库检查数据库删除_id";字段名的后缀,python,django,inspectdb,Python,Django,Inspectdb,我在django中为遗留数据库使用inspectdb时遇到问题。我认为我的问题本质上与这里描述的相反: 我数据库中的许多字段名以“\u id”结尾。在运行inspectdb时,以“_id”结尾且也是外键或OneToOneFields的字段将删除“_id”: 我可以通过将上面的行更改为: class AssayClassMap(models.Model): ass_cls_map_id = models.BigIntegerField(primary_key=True) assa

我在django中为遗留数据库使用inspectdb时遇到问题。我认为我的问题本质上与这里描述的相反:

我数据库中的许多字段名以“\u id”结尾。在运行inspectdb时,以“_id”结尾且也是外键或OneToOneFields的字段将删除“_id”:

我可以通过将上面的行更改为:

class AssayClassMap(models.Model):
    ass_cls_map_id = models.BigIntegerField(primary_key=True)
    assay_id = models.ForeignKey('Assays', models.DO_NOTHING, blank=True, null=True, db_column='assay_id')
问题在于,每次为该数据库和其他数据库生成模型文件时,都需要手动更改数百个模型文件。我可以想出一个脚本来纠正这些问题,但我想有一些解决办法


谢谢,我解决了这个问题。这是model_to_dict函数的问题,而不是django函数的问题。为了满足我的需要,我必须重写model_to_dict函数,如下所示:

def custom_to_dict(instance, fields=None, exclude=None):
    opts = instance._meta
    data = {}
    for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
        if not getattr(f, 'editable', False):
            continue
        if fields and f.attname not in fields:
            continue
        if exclude and f.attname in exclude:
            continue
        data[f.attname] = f.value_from_object(instance)
    return data

f.name的任何实例都已更改为f.attname。这会保留“_id”后缀

为什么会出现此问题?数据库中的字段名仍将包括_id,因为Django会在所有外键后面附加“_id”。当您为这些字段设置值时,您可以设置对象(assay=AssayObject),也可以将值设置为附加了“\u id”(assay\u id=1)的字段名。我相信我现在看到问题可能出在“model\u to\u dict”函数中。输出字典键对应于Django模型字段名(缺少“_id”),而不是数据库字段名我能够解决它!问题出在model_to_dict函数中,而不是django问题
def custom_to_dict(instance, fields=None, exclude=None):
    opts = instance._meta
    data = {}
    for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
        if not getattr(f, 'editable', False):
            continue
        if fields and f.attname not in fields:
            continue
        if exclude and f.attname in exclude:
            continue
        data[f.attname] = f.value_from_object(instance)
    return data