2017-10-19 16 views
0

Je crée un site de site d'offres d'emploi, où tous les travaux sont affichés dans une liste et chacun est un lien qui mène à une page affichant plus d'informations sur le travail.Un objet clé étranger a-t-il une valeur d'identifiant unique?

Je les modèles suivants:

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 
from django.dispatch import receiver 

# Create your models here. 
class Employer(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 


    def __str__(self): 
     return self.user.first_name 


@receiver(post_save, sender=User) 
def create_employer(sender, instance, created, **kwargs): 
    if created: 
     Employer.objects.create(user=instance) 

@receiver(post_save, sender=User) 
def save_employer(sender, instance, **kwargs): 
    instance.employer.save() 

class Job(models.Model): 
    poster = models.ForeignKey(Employer, on_delete=models.CASCADE) 
    job_title = models.CharField(max_length=50) 
    establishment_name = models.CharField(max_length = 50) 
    address = models.CharField(max_length = 50) 
    state = models.CharField(max_length = 20) 
    zip_code = models.CharField(max_length = 10) 

    def __str__(self): 
     return self.job_title + " - " + self.establishment_name \ 
       + ", " + self.poster.user.first_name + " " +self.poster.user.last_name 

views.py:

def index(request): 
    jobs = Job.objects.all 
    return render(request, 'core/index.html', {'jobs' :jobs }) 

index.html, les emplois disponibles sont répertoriés comme si:

<table> 
     <tbody> 
      {% for job in jobs %} 
       <tr> 
        <td><a href="#">{{ job.job_title}} - {{ job.establishment_name }}</a></td> 
       </tr> 
      {% endfor %} 

     </tbody> 
    </table> 

Je veux ceux-ci sont des liens cliquables, qui amèneront l'utilisateur à une autre page en leur donnant plus de détails sur le travail. Je pense que j'ai besoin d'une certaine valeur d'identifiant pour Job objets pour rendre cela possible, mais je peux me tromper. Est-ce que quelqu'un sait comment s'y prendre? Note: J'ai fait quelque chose de similaire avec les ID utilisateur avant: url(r'^claim/(?P<user_id>[0-9]+)/$', views.ClaimView.as_view(), name = "claim"),, mais comment le ferais-je avec Job objets?

Répondre

0

Je veux juste clarifier afin de comprendre ce qui se passe derrière la scène.

champ Id est pas magique

En fait, Django est un champ pour ajoutant vous. Chaque fois que vous créez un modèle Django ajouter ce champ:

id = models.AutoField(primary_key=True) 

Cette unicité et d'assurer l'intégrité des données troughout votre base de données. Voici le correspondant documentation

Pour des fins éducatives ici est une façon que vous pouvez remplacer le comportement par défaut:

my_field = models.AutoField(primary_key=True) 

NOTE

Aussi, les gens souvent ne pense pas que ce soit une grosse affaire . Mais parfois, il peut vraiment être un sauveur de la vie pour vraiment y penser. Parce qu'il y a des tonnes de questions sur Stack demandant comment inverser ce comportement.

+0

très perspicace, merci! –

1

Tous les modèles, y compris votre modèle de travail, ont une zone de clé primaire unique, appelée par défaut id.

+0

Welp, c'était incroyablement simple. Merci Daniel! –