Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat satu kelas mewarisi elemen kelas lain dalam Django?

Bagaimana untuk membuat satu kelas mewarisi elemen kelas lain dalam Django?

WBOY
WBOYke hadapan
2024-02-09 22:09:03385semak imbas

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

Kandungan soalan

Saya mempunyai kelas pelanggan dengan atribut (nama syarikat...) dan satu lagi dengan data pelanggan. Ia adalah medan teks tetapi tidak dipaparkan sebagai medan teks. Saya memanggilnya menggunakan models.foreignkey(outraclasse, on_delete=models.cascade) dalam kelas pelanggan. Adakah saya melakukan sesuatu yang salah? Apa yang kurang?

Sunting: Ini adalah model dan pengurus aplikasi Pentadbir:

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)

Model

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}"
"""

Jawapan betul


Tingkah laku lalai dalam Django Admin adalah untuk rujukan kepada model lain untuk muncul sebagai kotak lungsur. Ini masuk akal kerana rujukan kepada model lain (kunci asing) hanyalah nilai yang mengatakan: "baris mana dalam jadual lain memegang data yang berkaitan dengan rekod ini".

Biasanya tiada peluang untuk mengedit nilai secara langsung dalam jadual lain (model lain).

Jika anda mahu model yang berkaitan muncul dalam pentadbir Django sebagai medan teks boleh diedit, anda harus melihat kelas "sebaris" pentadbir Django. Anda perlu mentakrifkan ClientBasicData sebaris dan kemudian merujuk data tersebut daripada ClientAdmin.

Nota: Perkara yang anda cuba lakukan nampaknya mungkin terdapat masalah yang lebih asas dengan reka bentuk model anda. Anda mungkin ingin memikirkan cara lain untuk mengatur data ini (iaitu, adakah benar-benar alasan untuk meletakkan "data asas" dalam jadual lain?).

Atas ialah kandungan terperinci Bagaimana untuk membuat satu kelas mewarisi elemen kelas lain dalam Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam