Écriture de la vue Python / Django pour «rejoindre» sur trois modèles / tables

StackOverflow https://stackoverflow.com/questions/1300657

  •  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**
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top