Table1
sett_ num | Sett_typ
-----------------------------
2014232 N
2014232 S
2014232 O
Table2
stt_type_code | stt_typ_name
----------------------------
N Normal
S OPTIONS
O Index
这个数据库如何查找两个表,在表1中我需要通过引用表2显示“Normal而不是N”
我已经实现了这个但问题是我已经使这个变化的字段无法搜索并且过滤器无法正常工作
所以我需要在这里实现外键可以请你帮我解决这个问题。
模型和管理员看起来像这样
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
这是我需要以外键方式实现的方式可以有人帮忙吗?请给我模型和管理员的例子。
答案 0 :(得分:1)
将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')