首頁  >  文章  >  後端開發  >  Django 中如何讓一個類別繼承另一個類別的元素?

Django 中如何讓一個類別繼承另一個類別的元素?

WBOY
WBOY轉載
2024-02-09 22:09:03383瀏覽

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

問題內容

我有一個具有屬性(公司名稱......)的客戶類,另一個具有客戶資料。它是一個文字字段,但不顯示為文字字段。我在客戶端類別中使用 models.foreignkey(outraclasse, on_delete=models.cascade) 呼叫它。我做錯了嗎?缺什麼?

編輯: 這些是應用程式的模型和管理員 管理員:

from django.contrib import admin
from 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 = 10

admin.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 中引用該資料。

注意:您正在嘗試做的事情看起來您的模型設計可能存在更根本的問題。您可能需要考慮組織這些資料的其他方式(即,真的有理由將「基本資料」放在另一個表格中嗎?)。

以上是Django 中如何讓一個類別繼承另一個類別的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除