django管理列表\显示SQL连接数据

django管理列表\显示SQL连接数据,django,django-models,django-admin,Django,Django Models,Django Admin,由现有php组成的页面正在被更改为python和Django 现有查询 Select l.lawyer_idx, l.lawyer_email, lp.lawyer_profile_path, lp.lawyer_profile_name, lc.lawyer_company_name, lc.lawyer_company_address, lc.lawyer_detail_address, l.lawyer_agent from

由现有php组成的页面正在被更改为python和Django

现有查询

Select
    l.lawyer_idx,
    l.lawyer_email,
    lp.lawyer_profile_path,
    lp.lawyer_profile_name,
    lc.lawyer_company_name,
    lc.lawyer_company_address,
    lc.lawyer_detail_address,
    l.lawyer_agent
from lawyer l
left join lawyer_profile lp on l.lawyer_idx = lp.lawyer_idx
left join lawyer_company lc on l.lawyer_idx = lc.lawyer_idx
order by l.register_date desc;
我在models.py制作了每张桌子

    models.py

    class Lawyer(models.Model):
     lawyer_idx = models.AutoField('ID', primary_key=True)
      lawyer_email = models.CharField('E-mail', unique=True, max_length=200)
     lawyer_agent = models.CharField(max_length=1, blank=True, null=True)

    class Meta:
       managed = False
       db_table = 'lawyer'


    class LawyerProfile(models.Model):
     lawyer_idx = models.AutoField('ID', primary_key=True)
     lawyer_profile_path = models.CharField(max_length=200, blank=True, null=True)
   lawyer_profile_name = models.CharField(max_length=100, blank=True, null=True)
.................

    class LawyerCompany(models.Model):
     lawyer_idx = models.AutoField('ID', primary_key=True)
     lawyer_company_name = models.CharField(max_length=100)
    ...............
我们希望将以下查询放入 Django Admin.py的list_display部分是否有任何方法显示加入sql的数据

    Admin.py
    from django.contrib import admin
    from .models import Lawyer, LawyerCompany, LawyerProfile

    @admin.register(Lawyer)
    class LawyerAdmin(admin.ModelAdmin):

       list_per_page = 100
       **list_display = ['lawyer_idx', 'lawyer_email', 
'lawyer_agent', 'lawyer_profile_path', 'lawyer_profile_name', 'lawyer_company_name']**

您可以将该查询添加为原始sql查询,但这并不能充分利用Django的ORM

您没有明确定义模型上的任何关系,因此Django不知道模型之间的关系

如果
lawyer\u idx
引用该律师,则可以将该字段更改为
OneToOneField
/
ForeignKey
(此处的
AutoField
可能是错误的选择,因为值应与
lawyer
模型中的值相对应,并且不会自动生成)。此外,还可以查看和关系的文档

class LawyerProfile(models.Model):
     lawyer = models.OneToOneField(Lawyer, primary_key=True, 
         db_column="lawyer_idx", related_name="profile")
Django应该在访问相关数据时自动执行连接;在
律师
实例上,您可以通过其
相关名称
.profile
访问配置文件。在
list\u display
选项中,您可以使用双下划线语法访问相关数据:

list_display = ['lawyer_idx','lawyer_agent', 'profile__lawyer_profile_path']
list_select_related = ['profile']

如果您添加Django,它将预先加入指定的表,因此在访问相关数据时不会执行额外的查询。

您可以将该查询添加为原始sql查询,但这不会充分利用Django的ORM

您没有明确定义模型上的任何关系,因此Django不知道模型之间的关系

如果
lawyer\u idx
引用该律师,则可以将该字段更改为
OneToOneField
/
ForeignKey
(此处的
AutoField
可能是错误的选择,因为值应与
lawyer
模型中的值相对应,并且不会自动生成)。此外,还可以查看和关系的文档

class LawyerProfile(models.Model):
     lawyer = models.OneToOneField(Lawyer, primary_key=True, 
         db_column="lawyer_idx", related_name="profile")
Django应该在访问相关数据时自动执行连接;在
律师
实例上,您可以通过其
相关名称
.profile
访问配置文件。在
list\u display
选项中,您可以使用双下划线语法访问相关数据:

list_display = ['lawyer_idx','lawyer_agent', 'profile__lawyer_profile_path']
list_select_related = ['profile']

如果您添加Django,它将预先加入指定的表,因此在访问相关数据时不会执行其他查询。

谢谢~!我有个问题。文件“C:\workspace\bhsn\models.py”,第603行,在LawyerProfile lawyer\u idx=models.OneToOneField(lawyer,primary\u key=True,db\u column='lawyer\u idx',related\u name='profile')类型错误:\uu init缺少1个必需的位置参数:“on\u delete'是的,您需要在\u delete=models.CASCADE上添加一个
。我尝试了这个!!!!!!model.py class LawyerCompany(models.model):lawyer\u idx=models.OneToOneField(lawyer,primary\u key=True,db\u column=“lawyer\u idx”,related\u name=“profile”,on\u delete='models.CASCADE')lawyer\u company\u name=models.CharField(max\u length=100)和admin.py->->list\u display=('lawyer\u idx',profile\u lawyer\u company\u company\u name'),但是!!!!!!!!!错误::(admin.E108)“list\u display[6]”的值指的是“profile\u lawyer\u company\u name”,它不是可调用的,“LawyerAdmin”的属性,也不是“bhsn.lawyer”上的属性或方法。很抱歉,我忽略了这似乎不适用于
OneToOneField
,但您可以在这个问题上这样做,谢谢~!我有个问题。文件“C:\workspace\bhsn\models.py”,第603行,在LawyerProfile lawyer\u idx=models.OneToOneField(lawyer,primary\u key=True,db\u column='lawyer\u idx',related\u name='profile')类型错误:\uu init缺少1个必需的位置参数:“on\u delete'是的,您需要在\u delete=models.CASCADE上添加一个
。我尝试了这个!!!!!!model.py class LawyerCompany(models.model):lawyer\u idx=models.OneToOneField(lawyer,primary\u key=True,db\u column=“lawyer\u idx”,related\u name=“profile”,on\u delete='models.CASCADE')lawyer\u company\u name=models.CharField(max\u length=100)和admin.py->->list\u display=('lawyer\u idx',profile\u lawyer\u company\u company\u name'),但是!!!!!!!!!错误::(admin.E108)“list\u display[6]”的值指的是“profile\u lawyer\u company\u name”,它不是可调用的、“LawyerAdmin”属性,也不是“bhsn.lawyer”上的属性或方法。很抱歉,我忽略了这似乎不适用于
OneToOneField
,但您可以在这个问题中这样做