2 votes

Django : Ecrire un champ-valeur de modèle dans une liste déroulante d'un autre modèle ?

J'ai obtenu un modèle "PC_Configuration" avec plusieurs listes déroulantes :

class PC_Configuration(models.Model):
PROCESSOR_CHOICES = (
    ('None', 'Wähle deinen Prozessor'),
    ('1', 'Prozessor1'),
    ('2', 'Prozessor2'),
    ('3', 'Prozessor3'),
)

GRAPHICSCARD_CHOICES = (
    ('None', 'Wähle deine Grafikkarte'),
    ('1', 'Grafikkarte1'),
    ('2', 'Grafikkarte2'),
    ('3', 'Grafikkarte3'),
)

OS_CHOICES = (
    ('None', 'Wähle dein Betriebssystem'),
    ('1', 'Betriebssystem1'),
    ('2', 'Betriebssystem2'),
    ('3', 'Betriebssystem3'),
)

RAM_CHOICES = (
    ('None', 'Wähle deinen Arbeitsspeicher'),
    ('1', 'RAM1'),
    ('2', 'RAM2'),
    ('3', 'RAM3'),
)

HARDDRIVE_CHOICES = (
    ('None', 'Wähle deine Restspeicher-Größe'),
    ('1', 'Festplatte1'),
    ('2', 'Festplatte2'),
    ('3', 'Festplatte3'),
)

processor = models.CharField(max_length=25, choices=PROCESSOR_CHOICES, default='None')
graphicscard = models.CharField(max_length=25, choices=GRAPHICSCARD_CHOICES, default='None')
ram = models.CharField(max_length=25, choices=RAM_CHOICES, default='None')
os = models.CharField(max_length=25, choices=OS_CHOICES, default='None')
harddrive = models.CharField(max_length=25, choices=HARDDRIVE_CHOICES, default='None')

Je viens de tester les choix de ces champs déroulants avec quelques entrées codées en dur, mais je veux en fait obtenir toutes les données pour les choix de la rubrique "transformateurs" -Champ de dépôt à partir du tableau du champ nom du modèle Processeurs :

class Processors(models.Model):
name = models.CharField(max_length=50)

Ma question est donc la suivante : est-il possible d'obtenir toutes les valeurs à l'intérieur de l'élément nom -Domaines de la Modèle de processeur Il est possible de les écrire dans un tableau, comme l'entrée codée en dur actuelle, afin de pouvoir les afficher dans le champ déroulant de l'élément PC_Configuration Modèle ?

Édition abrégée : J'ai essayé d'utiliser quelque chose comme :

list(PC_Configuration.objects.all().values_list('name', flat=True)) 

Mais il semble que "PC_Configuration.objects" n'existe pas

2voto

Vous pouvez avoir une clé étrangère vers cette table dans votre modèle, disons :

processor = models.ForeignKey(Processors, models.DO_NOTHING)

Vous pouvez ensuite créer un modèle de formulaire pour PC_Configuration.

class MyForm(forms.ModelForm):
    class Meta:
        model = PC_Configuration

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['processors'].quereset = Processors.objects.all()
        self.fields['processors'].label_from_instance = lambda obj: "%s" % obj.name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X