Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk membuat satu kelas mewarisi elemen kelas lain dalam Django?
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}" """
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!