首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将Django模型连接到主键名称不是ID的表

将Django模型连接到主键名称不是ID的表
EN

Stack Overflow用户
提问于 2020-11-18 06:36:44
回答 1查看 18关注 0票数 0

我有一个项目,其中主列名称是'N‘,而不是标准的'id’。我无法访问原始数据库来更改它,所以我希望下面的代码可以做到这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ExSLoc(models.Model):
   id = models.IntegerField(primary_key=True, db_column='n')

class Meta:
    db_table = original_db_table
    managed = False

它确实是这样的,但我在Django模型表单中遇到了一个奇怪的bug,告诉我:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'ExSLoc' object has no attribute 'id'

这是完整的回溯。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
| Traceback (most recent call last):
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 174, in get_response
website_1        |     response = self.process_exception_by_middleware(e, request)
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 172, in get_response
website_1        |     response = response.render()
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/template/response.py", line 160, in render
website_1        |     self.content = self.rendered_content
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/template/response.py", line 137, in rendered_content
website_1        |     content = template.render(context, self._request)
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/template/backends/jinja2.py", line 70, in render
website_1        |     return self.template.render(context)
website_1        |   File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 1090, in render
website_1        |     self.environment.handle_exception()
website_1        |   File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 832, in handle_exception
website_1        |     reraise(*rewrite_traceback_stack(source=source))
website_1        |   File "/opt/project/templates/rfs_submission/rfs_new_0.html", line 1, in top-level template code
website_1        |     {% extends "rfs_submission/rfs_new.html" %}
website_1        |   File "/opt/project/templates/rfs_submission/rfs_new.html", line 9, in top-level template code
website_1        |     {% if rfs.rfstype_id == 'RFSTTR' and step == 1 %}
website_1        |   File "/opt/project/templates/layout_modern.html", line 40, in top-level template code
website_1        |     {% block body %}
website_1        |   File "/opt/project/templates/rfs_submission/rfs_new.html", line 65, in block "body"
website_1        |     {% block form %}{% endblock %}
website_1        |   File "/opt/project/templates/rfs_submission/rfs_new_0.html", line 4, in block "form"
website_1        |     {% set field=form.loc %}{% include "partials/form_input_tr.html" %}
website_1        |   File "/opt/project/templates/partials/form_input_tr.html", line 8, in top-level template code
website_1        |     {{ field }}
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/utils/html.py", line 381, in <lambda>
website_1        |     klass.__unicode__ = lambda self: mark_safe(klass_unicode(self))
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/forms/boundfield.py", line 43, in __str__
website_1        |     return self.as_widget()
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/forms/boundfield.py", line 101, in as_widget
website_1        |     return force_text(widget.render(name, self.value(), attrs=attrs))
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/forms/boundfield.py", line 148, in value
website_1        |     return self.field.prepare_value(data)
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 1204, in prepare_value
website_1        |     return value.pk
website_1        |   File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 536, in _get_pk_val
website_1        |     return getattr(self, meta.pk.attname)
website_1        | AttributeError: 'ExSLoc' object has no attribute 'id'
EN

回答 1

Stack Overflow用户

发布于 2020-11-18 06:59:51

您可以强制Django忽略id字段,方法是在另一个字段中设置primary_key=True

因此,如果您希望将id替换为n,则应该更改您的模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ExSloc(models.Model):
    n = models.AutoField(primary_key=True)

请注意,AutoField用于在创建模型的新对象时自动增加字段值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64888222

复制
相关文章
基于Saas主键表生成主键id
首先需要对当前的id进行拦截操作,也即使用aop的切面Aspect对切点进行拦截,在进行新增的时候进行拦截:
路行的亚洲
2021/06/24
1.8K0
django raw_id_fields 显示名称而不是id(raw_id_fields: How to show a name instead of id)
为了防止页面加载的时候加载所有的Foreignkey到内存,django提供了一个raw_id_fields,该tupple内的数据将只展示id。虽然内存不加载了,但是基本没法看。不知道是个什么东西。
obaby
2023/02/24
1.9K0
order by 主键id导致全表扫描的问题
一 简介 在检查某业务数据库的slowlog 时发现一个慢查询,查询时间 1.57s ,检查表结构 where条件字段存在正确的组合索引,正确的情况下优化器应该选择组合索引,而非为啥会导致慢查询呢? 且看本文慢慢分析。
用户1278550
2018/08/09
4K0
MySQL中分库分表之后,ID主键的处理
【玩转 GPU】AI绘画、AI文本、AI翻译、GPU点亮AI想象空间-腾讯云开发者社区-腾讯云 (tencent.com)
疯狂的KK
2023/07/07
1.1K0
MySQL中分库分表之后,ID主键的处理
分库分表之后,id 主键如何处理?
其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。
架构师修炼
2020/12/16
1.1K0
分库分表之后,id 主键如何处理?
分库分表之后,id 主键如何处理?
这个就是说你的系统里每次得到一个 id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个 id。拿到这个 id 之后再往对应的分库分表里去写入。
IT技术小咖
2019/11/22
5350
Django进阶-5-ORM连表查询
注意对象集合调用values(),正向查询是外键字段__XX,而反向是小写表名__YY看起来
小团子
2019/07/18
1.6K0
Django进阶-5-ORM连表查询
面试题:分库分表之后,id 主键如何处理?
其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。
用户1263954
2019/07/12
2.8K0
面试题:分库分表之后,id 主键如何处理?
Mybatis获取自增长的主键id
这个问题主要是今天项目中新加的一个需求导致的,主要过程是这样的,因为每个项目里面用户,角色,权限这三者是密不可分的,在数据库中就可以通过下面这张图来表达他们三者之间的关系:
萌萌哒的瓤瓤
2021/01/13
3.4K0
Mybatis获取自增长的主键id
MyBatisPlus 主键ID生产规则
在MyBatis-Plus中,主键ID的生成规则可以通过注解或配置文件进行配置。以下是常见的主键ID生成规则:
收心
2023/08/24
1.3K0
Django笔记(十二)连表查询之性能提升
就是通过一个字段点出来的。循环获取数据,再获取外键里面的数据的时候,会再次的执行sql语句进行数据库的查询。
一写代码就开心
2021/11/15
9050
Django笔记(十二)连表查询之性能提升
Django基础篇-模型表关系
在 Mysql 中一对多是通过外键实现的,在 django 模型中通过 ForeignKeyField 类型实现。
小团子
2019/07/18
8720
Django基础篇-模型表关系
Oracle mybatis 新增返回主键ID
<selectKey resultType="String" order="BEFORE" keyProperty="enterp_no"> SELECT PRSP_CRM_ENTERP_ID.nextval FROM DUAL </selectKey>
斯文的程序
2019/11/07
3.3K0
Oracle mybatis 新增返回主键ID
06.Django基础五之django模型层(二)多表操作
    一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束。
changxin7
2019/09/29
2.7K0
如何让所有实体类用相同名称的主键(很有力的问题,比如所有表实体主键都用ID)
这个问题比较有力量,哈哈! 例如:有两个表userbases和products 两个表的主键分别为UserID和ProductID,那么,我想问有没有一种方法把它们的主键统一起来,用一个字段名称表示呢? 事实上,这个问题可以从一个基础知识说起! 接口,没错就是接口,我们知道接口中的一切,在它的实现类中都必须被实现,想一下,如果在接口中定义一个object类型或者string类型的字段,让所以子类都为它赋值,那不就OK了吗? 哈哈,说干就干 /// <summary> /// 实体模块统一接口
逸鹏
2018/04/09
1.3K0
oracle常用基础命令创建表多字段组合主键约束查看表的主键名称 注意大写禁用开启主键约束删除约束等效上面
使用系统用户登录 [username/password][@server][as sysdba|sysoper] 查看登录的用户 show user 启用scott用户 alter user scott account unlock|lock; 创建表空间 # 表空间 create tablespace $teblespace_name datafile '$filepath' size $sizeM; # 临时表空间 create temporary tablespace $teblespace_nam
AlicFeng
2018/06/08
1.4K0
R语言ggtree:将进化树中的序列id改成物种名称
通常我们会使用比对好的fasta文件构建进化树,fasta文件中大于号后的内容就是最终进化树上的文字标签。如果拿到进化树文件后你想替换掉其中的一些内容,那该怎么办呢?本篇推文介绍一下使用R语言的ggt
用户7010445
2021/01/20
2.7K0
R语言ggtree:将进化树中的序列id改成物种名称
django中新插入对象数据到数据库并返回自增主键的ID
问题:在Django中新插入一条数据之后,后面还需返回其自增的主键(ID)的值,从而完成后面的操作 修改前: sign_id = models.IntegerField(primary_key=True) 解决: 将IntegerField 换成 AutoField 修改后: sign_id = models.AutoField(primary_key=True) 用法: 例如对象名为Book book = Book(name='C语言', price=25.5) book.save() print('
卡伊德
2022/09/13
1.3K0
在线Coding题目 例如:部门表(id,名称...),员工表(id,部门id,姓名,薪资,入职时间...), 查出部门中薪资最高的员工;部门薪资总和;
coderlwz
2023/10/22
2380
InnoDB存储引擎表的主键
在InnoDB存储引擎中,表是按照主键顺序组织存放的。在InnoDB存储引擎表中,每张表都有主键(primary key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建索引:
星哥玩云
2022/08/13
8140
InnoDB存储引擎表的主键

相似问题

在django django模型中不是主键的id字段

12

没有主键和id的django模型

123

在用户模型Django中使用name作为主键,而不是id

140

不带id和主键的Django枢轴表

13

Django管理页面模型名而不是表对象(Id)

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文