PHP前端开发

Django 中如何让一个类继承另一个类的元素?

百变鹏仔 1天前 #Python
文章标签 元素
问题内容

我有一个具有属性(公司名称......)的客户类,另一个具有客户数据。它是一个文本字段,但不显示为文本字段。我在客户端类中使用 models.foreignkey(outraclasse, on_delete=models.cascade) 调用它。我做错了吗?缺少什么?

编辑:这些是应用程序的模型和管理员管理员:

from django.contrib import adminfrom tenants.models import client# register your models here.class clientadmin(admin.modeladmin):    list_display = [        'company_name',        'company_register_name',        'company_id']    search_fields = [        'company_name',        'company_register_name',        'company_id']    list_per_page = 10admin.site.register(client,clientadmin)

型号

from django.db import models                                                                                                                                             from datetime import date                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           class ClientBasicData(models.Model):                                                                                                                                         # client_id = models.ForeignKey(Client, on_delete=models.CASCADE)                                                                                                        name_admin_ti = models.CharField(max_length=30,                                                                                                                                                           verbose_name = u'Nome do responsavel TI',                                                                                                                                unique=False)      def __str__(self):        return f"{self.name_admin_ti}"class Client(models.Model):  company_data = models.ForeignKey('ClientBasicData',                                      on_delete=models.CASCADE,                                     verbose_name= u'Dados do                                      cliente',                                     unique=False)  company_name = models.CharField(max_length=30,          verbose_name = u'Razao social',          unique=False)  company_register_name = models.CharField(max_length=30,          verbose_name = u'Nome da Empresa',          unique=True)  company_id = models.CharField(          max_length=30,          verbose_name = u'CNPJ da empresa',          unique=True)  date_start_company = models.DateField(          verbose_name = u'Data de ingresso de cliente',          unique=False,          default=date.today,          null=True)  def __str__(self):      return f"{self.company_name} - {self.company_register_name} - {self.company_id}""""class ClienteBasicData(models.Model):    client_id = models.ForeignKey(Client, on_delete=models.CASCADE)    name_admin_ti = models.CharField(max_length=30,                                     verbose_name = u'Nome do responsabel TI',                                     unique=False)    def __str__(self):        return f"{self.name_admin_ti}""""

正确答案


Django Admin 中的默认行为是对另一个模型的引用显示为下拉框。这是有道理的,因为对另一个模型(外键)的引用只是一个值,它表示:“另一个表中的哪一行保存与此记录相关的数据”。

通常没有机会直接编辑其他表(其他模型)中的值。

如果您希望相关模型作为可编辑文本字段显示在 Django 管理中,您应该查看 Django 管理“内联”类。您需要为 ClientBasicData 定义内联,然后从 ClientAdmin 中引用该数据。

注意:您正在尝试做的事情看起来您的模型设计可能存在更根本的问题。您可能需要考虑一下组织这些数据的其他方式(即,真的有理由将“基本数据”放在另一个表中吗?)。