Écriture de la vue Python / Django pour «rejoindre» sur trois modèles / tables
-
18-09-2019 - |
Question
Commencez juste mon expérience Python / Django et j'ai un problème :-)
J'ai donc un modèle.py comme ceci:
from django.db import models
class Priority(models.Model):
name = models.CharField(max_length=100)
class Projects(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length=150)
priority = models.ForeignKey(Priority)
class Tasks(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length=40)
priority = models.ForeignKey(Priority)
Dans le tableau prioritaire, je prévois de stocker des données comme 1. High, 2.Medium, 3.Low et dans les tâches La priorité de la table sera stockée comme ID (1, 2 ou 3)
Et la question est de savoir comment rédiger une vue qui affiche toutes mes tâches mais avec la priorité nommée? Par exemple:
name: Task 1
description: Description 1
priority: **High**
La solution
Votre point de vue n'a pas à faire grand-chose.
tasks = Tasks.objects.all()
Fournissez-le à votre modèle.
Votre modèle peut alors faire quelque chose comme ce qui suit.
{% for t in tasks %}
name: {{t.name}}
description: {{t.description}}
priority: **{{t.priority.name}}**
{% endfor %}
Autres conseils
Il existe de nombreuses façons d'accomplir ce dont vous avez besoin. L'un des plus faciles serait de garder un dictionnaire de numéro à la corde. Comme ceci: 1-> haut, 2-> moyen, 3-> haut.
Gardez ce dictionnaire en dehors de vos fonctions de vue afin que vous puissiez y accéder à partir de toutes vos fonctions de vue qui doivent obtenir la priorité.
Vous pouvez également simplement écrire un commutateur qui détermine ce qu'il faut afficher dans le modèle.