如何在管理和模型中实现外键

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')