Maison >développement back-end >Tutoriel Python >Comment faire en sorte qu'une classe hérite des éléments d'une autre classe dans Django ?
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)
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}" """
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!