Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man in Django eine Klasse dazu bringen, Elemente einer anderen Klasse zu erben?
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)
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}" """
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!