Wie kann man in Django eine Klasse dazu bringen, Elemente einer anderen Klasse zu erben?

WBOY
Freigeben: 2024-02-09 22:09:03
nach vorne
382 Leute haben es durchsucht

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

Frageinhalt

Ich habe eine Kundenklasse mit Attributen (Firmenname...) und eine andere mit Kundendaten. Es ist ein Textfeld, wird aber nicht als Textfeld angezeigt. Ich nenne es mit models.foreignkey(outraclasse, on_delete=models.cascade) in der Client-Klasse. Habe ich etwas falsch gemacht? Was fehlt?

Bearbeiten: Dies sind die Modelle und Manager der Anwendung Administrator:

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)
Nach dem Login kopieren

Modell

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}"
"""
Nach dem Login kopieren

Richtige Antwort


Das Standardverhalten in Django Admin besteht darin, dass ein Verweis auf ein anderes Modell als Dropdown-Feld angezeigt wird. Dies ist sinnvoll, da ein Verweis auf ein anderes Modell (Fremdschlüssel) nur ein Wert ist, der besagt: „Welche Zeile in einer anderen Tabelle enthält die Daten, die sich auf diesen Datensatz beziehen?“.

Normalerweise besteht keine Möglichkeit, Werte in anderen Tabellen (anderen Modellen) direkt zu bearbeiten.

Wenn Sie möchten, dass das zugehörige Modell in Django Admin als bearbeitbares Textfeld angezeigt wird, sollten Sie sich die „Inline“-Klasse von Django Admin ansehen. Sie müssen die ClientBasicData inline definieren und dann im ClientAdmin auf diese Daten verweisen.

Hinweis: Was Sie versuchen, scheint ein grundlegenderes Problem mit Ihrem Modelldesign zu sein. Vielleicht möchten Sie über andere Möglichkeiten nachdenken, diese Daten zu organisieren (d. h. gibt es wirklich einen Grund, die „Grunddaten“ in eine andere Tabelle einzutragen?).

Das obige ist der detaillierte Inhalt vonWie kann man in Django eine Klasse dazu bringen, Elemente einer anderen Klasse zu erben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!