Comment faire en sorte qu'une classe hérite des éléments d'une autre classe dans Django ?

WBOY
Libérer: 2024-02-09 22:09:03
avant
380 Les gens l'ont consulté

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

Contenu de la question

J'ai une classe client avec des attributs (nom de l'entreprise...) et une autre avec des données client. Il s'agit d'un champ de texte mais il n'est pas affiché sous forme de champ de texte. Je l'appelle en utilisant models.foreignkey(outraclasse, on_delete=models.cascade) dans la classe client. Est-ce que j'ai fait quelque chose de mal? Qu'est-ce qui manque ?

Modifier : Ce sont les modèles et gestionnaires de l'application Administrateur :

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)
Copier après la connexion

Modèle

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}"
"""
Copier après la connexion

Bonne réponse


Le comportement par défaut dans Django Admin est qu'une référence à un autre modèle apparaisse sous forme de liste déroulante. Cela a du sens car une référence à un autre modèle (clé étrangère) est simplement une valeur qui dit : « quelle ligne d'une autre table contient les données liées à cet enregistrement ».

Il n'est généralement pas possible de modifier directement les valeurs dans d'autres tables (autres modèles).

Si vous souhaitez que le modèle associé apparaisse dans l'administrateur Django sous forme de champ de texte modifiable, vous devriez jeter un œil à la classe "en ligne" de l'administrateur Django. Vous devez définir le ClientBasicData en ligne, puis référencer ces données à partir de ClientAdmin.

Remarque : ce que vous essayez de faire semble être un problème plus fondamental avec la conception de votre modèle. Vous voudrez peut-être réfléchir à d'autres façons d'organiser ces données (c'est-à-dire, y a-t-il vraiment une raison de mettre les « données de base » dans un autre tableau ?).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!