如何在管理和模型中实现外键
How can implement foreign key in admin and model
Table1
sett_ num | Sett_typ
-----------------------------
2014232 N
2014232 S
2014232 O
Table2
stt_type_code | stt_typ_name
----------------------------
N Normal
S OPTIONS
O Index
这是数据库查找两个 table 的方式,这里是 table 1 我需要显示 "Normal instead of N by referring the Table 2"
我已经做到了,但问题是我进行此更改的字段不可搜索,过滤器无法正常工作
所以我需要在这里实现外键,请你帮我解决这个问题。
模型和管理员看起来像这样
Model.py(table 1)
class DLVR(models.Model):
sett_type = models.CharField(max_length=35, editable=False)
sett_num = models.CharField(max_length=7, editable=False)
Model.py(Table 2)
class Sttlmnt_typ_Master(models.Model):
stt_typ_code = models.CharField(max_length=10, editable=True)
stt_typ_name = models.CharField(max_length=35, editable=True)
Admin.py
class DLVRAdmin(admin.ModelAdmin):
list_display = ('sett_num','sett_type')
search_fields=['sett_num','sett_type']
def sett_type_display(self, obj):
if Sttlmnt_typ_Master.objects.filter(stt_typ_code=obj.sett_type).first():
sett_type = Sttlmnt_typ_Master.objects.filter(stt_typ_code=obj.sett_type).first()
return sett_type.stt_typ_name
else:
return obj.sett_type
这是我需要以外键方式实现的方式,有人可以帮忙吗?请给我模型和管理中的示例。
将primary_key
参数添加到Sttlmnt_typ_Master.stt_typ_code
,然后将DLVR.sett_type
更改为外键:
class Sttlmnt_typ_Master(models.Model):
stt_typ_code = models.CharField(max_length=10, primary_key=True)
stt_typ_name = models.CharField(max_length=35)
def __unicode__(self):
return self.stt_typ_name
class DLVR(models.Model):
sett_type = models.ForeignKey(Sttlmnt_typ_Master)
sett_num = models.CharField(max_length=7)
管理将非常简单:
class DLVRAdmin(admin.ModelAdmin):
list_display = ['sett_type', 'sett_num']
search_fields=['sett_num','sett_type__stt_typ_name']
要将原始数据设置为 DLVR.sett_type
(例如从 CSV 导入时)将 _id
添加到字段名称:
DLVR.objects.create(sett_type_id='O', sett_num='2014232')
Table1
sett_ num | Sett_typ
-----------------------------
2014232 N
2014232 S
2014232 O
Table2
stt_type_code | stt_typ_name
----------------------------
N Normal
S OPTIONS
O Index
这是数据库查找两个 table 的方式,这里是 table 1 我需要显示 "Normal instead of N by referring the Table 2"
我已经做到了,但问题是我进行此更改的字段不可搜索,过滤器无法正常工作
所以我需要在这里实现外键,请你帮我解决这个问题。
模型和管理员看起来像这样
Model.py(table 1)
class DLVR(models.Model):
sett_type = models.CharField(max_length=35, editable=False)
sett_num = models.CharField(max_length=7, editable=False)
Model.py(Table 2)
class Sttlmnt_typ_Master(models.Model):
stt_typ_code = models.CharField(max_length=10, editable=True)
stt_typ_name = models.CharField(max_length=35, editable=True)
Admin.py
class DLVRAdmin(admin.ModelAdmin):
list_display = ('sett_num','sett_type')
search_fields=['sett_num','sett_type']
def sett_type_display(self, obj):
if Sttlmnt_typ_Master.objects.filter(stt_typ_code=obj.sett_type).first():
sett_type = Sttlmnt_typ_Master.objects.filter(stt_typ_code=obj.sett_type).first()
return sett_type.stt_typ_name
else:
return obj.sett_type
这是我需要以外键方式实现的方式,有人可以帮忙吗?请给我模型和管理中的示例。
将primary_key
参数添加到Sttlmnt_typ_Master.stt_typ_code
,然后将DLVR.sett_type
更改为外键:
class Sttlmnt_typ_Master(models.Model):
stt_typ_code = models.CharField(max_length=10, primary_key=True)
stt_typ_name = models.CharField(max_length=35)
def __unicode__(self):
return self.stt_typ_name
class DLVR(models.Model):
sett_type = models.ForeignKey(Sttlmnt_typ_Master)
sett_num = models.CharField(max_length=7)
管理将非常简单:
class DLVRAdmin(admin.ModelAdmin):
list_display = ['sett_type', 'sett_num']
search_fields=['sett_num','sett_type__stt_typ_name']
要将原始数据设置为 DLVR.sett_type
(例如从 CSV 导入时)将 _id
添加到字段名称:
DLVR.objects.create(sett_type_id='O', sett_num='2014232')