You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Django报错fk_name 'id'不是candidates_info的外键问题求助

报错中文翻译

<class 'votenow.admin.addressInline'>: (admin.E202) 你配置的fk_name值id,并不是address模型中指向votenow.candidates_info模型的外键字段


问题根源

  1. 外键关系方向与Inline使用要求不符
    Django Admin的Inline组件(包括TabularInline、StackedInline)的作用是在父模型的编辑页面直接编辑关联的子模型数据,要求子模型必须存在一个指向父模型的外键字段。你当前的模型定义中,是在candidates_info(父模型)里定义了外键addr指向address(子模型),关系方向完全相反,不满足Inline的使用前提。
  2. fk_name配置错误
    id是Django模型默认生成的主键字段,本身不具备外键关联属性,你将它设置为fk_name的值,自然无法匹配到指向candidates_info的外键。

解决方案(按业务场景二选一)

场景1:需要实现「一个候选人关联多个地址」的逻辑

适合用Inline在候选人编辑页直接管理所有关联地址,按以下步骤修改:

  1. 调整models.py的外键定义
class candidates_info (models.Model):
  last_name = models.CharField(max_length=50)
  first_name = models.CharField(max_length=50)
  middle_name = models.CharField(max_length=50)
  moniker = models.CharField(max_length=35)
  registration_dt = models.DateTimeField('date registered')
  # 删除原有addr外键字段

class address(models.Model):
  # 新增指向candidates_info的外键字段
  candidate = models.ForeignKey(candidates_info, on_delete=models.CASCADE, related_name="addresses")
  lot_no = models.DecimalField(max_digits=5, decimal_places=0)
  block_no = models.DecimalField(max_digits=5, decimal_places=0)
  1. 调整admin.py的Inline配置
from django.contrib import admin
from .models import candidates_info, address

class addressInline(admin.TabularInline):
  model = address
  # 子模型只有一个指向父模型的外键时,fk_name可省略,Django会自动识别
  # fk_name = "candidate"

@admin.register(candidates_info)
class candidates_infoAdmin(admin.ModelAdmin):
  fields =['last_name', 'first_name', 'middle_name', 'moniker']
  inlines = [addressInline]

修改后执行makemigrations和migrate命令更新数据库结构即可。


场景2:需要实现「一个地址关联多个候选人」的逻辑

这种场景不需要使用Inline,直接把外键字段放到父模型的编辑字段列表即可,Django默认会生成下拉选择框供你选择关联的地址:

# 直接修改admin.py,删除所有addressInline相关配置
from django.contrib import admin
from .models import candidates_info

@admin.register(candidates_info)
class candidates_infoAdmin(admin.ModelAdmin):
  # 把addr字段加入编辑列表
  fields =['last_name', 'first_name', 'middle_name', 'moniker', 'addr']

内容的提问来源于stack exchange,提问作者Zyr.bLi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:36:01