2017-10-19 7 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:index.htmlをオン

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

、利用できるジョブがように記載されています:

<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フィールドは実際に魔法

ではありません、Djangoはあなたのためのフィールドを追加しています。 Djangoモデルを作成するたびに、次のフィールドを追加します。

id = models.AutoField(primary_key=True) 

これにより、データベース全体の一意性とデータの完全性が保証されます。ここでは、ここで教育目的のために、対応するdocumentation

は、デフォルトの動作をオーバーライドすることができます方法です。

my_field = models.AutoField(primary_key=True) 

NOTE

また、人々は多くの場合、これは大したことではないと思います。しかし、時には本当にそれを考える人を救う人になることもあります。 Stackにはこの動作を元に戻す方法を尋ねる質問がたくさんあるので。

+0

非常に洞察力、ありがとう! –

1

ジョブモデルを含むすべてのモデルには、一意のプライマリキーフィールド(デフォルトではid)があります。

+0

Welp、これは信じられないほど簡単でした。ダニエルありがとう! –

関連する問題