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

WBOY
Lepaskan: 2024-02-09 22:09:03
ke hadapan
382 orang telah melayarinya

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)
Salin selepas log masuk

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}"
"""
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!