Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man in Django eine Klasse dazu bringen, Elemente einer anderen Klasse zu erben?

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

WBOY
WBOYnach vorne
2024-02-09 22:09:03427Durchsuche

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)

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen