2017-10-19 1 views
0

모든 작업이 목록에 표시되고 각 작업이 작업에 대한 자세한 정보가 표시된 페이지로 연결되는 링크 인 작업 게시판 사이트를 만들고 있습니다.외래 키 개체에 고유 한 id 값이 있습니까?

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에서 사용할 수있는 작업이 너무로 나열됩니다 :

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

     </tbody> 
    </table> 

내가 원하는

나는 다음과 같은 모델을 가지고

이들은 클릭 할 수있는 링크가되어 사용자가 작업에 대한 세부 정보를 제공하는 다른 페이지로 이동하게됩니다. 이게 가능하도록하기 위해 Job 개체에 대해 id 값의 일종이 필요하다고 생각하고 있지만 틀릴 수도 있습니다. 누구든지이 일을하는 법을 알고 있습니까? 참고 : 이전에 사용자 ID와 비슷한 것을 수행했습니다 : url(r'^claim/(?P<user_id>[0-9]+)/$', views.ClaimView.as_view(), name = "claim"),,하지만 Job 개체를 사용하면 어떻게됩니까?

답변

0

장면 뒤에 어떤 일이 발생했는지 알기 쉽게 설명하고 싶습니다.

ID 필드는 사실 마법

는, 장고는 당신을위한 필드를 추가하지 않습니다이다. 매번 당신은 모델 장고이 필드를 추가 작성 :

id = models.AutoField(primary_key=True) 

이 데이터베이스 troughout 고유성과 데이터 무결성을 보장.

는 또한 사람들이 자주 생각하지 않습니다

my_field = models.AutoField(primary_key=True) 

주 큰 문제입니다 : 여기에 여기에 교육 목적을 위해 해당 documentation

는 기본 동작을 재정의 할 수있는 방법이다 . 그러나 때로는 정말 그것에 대해 생각하는 구원자가 될 수 있습니다. Stack에는이 동작을 되돌릴 방법을 묻는 질문이 많기 때문입니다.

+0

매우 통찰력, 감사합니다! –

1

작업 모델을 포함한 모든 모델의 기본 기본 키 필드는 id입니다.

+0

Welp, 이것은 매우 간단했습니다. 다니엘 감사합니다! –

관련 문제