外键对象是否有唯一的ID值?

问题描述:

我正在创建一个工作板网站,其中所有工作都显示在列表中,每个工作链接都会导致显示有关工作更多信息的页面。外键对象是否有唯一的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的事情:url(r'^claim/(?P<user_id>[0-9]+)/$', views.ClaimView.as_view(), name = "claim"),,但我如何使用Job对象执行此操作?

只是想澄清,所以你了解幕后发生了什么。

Id域是没有魔法

事实上,Django是增加一个字段为您服务。每当你创建一个模型Django添加这个字段:

id = models.AutoField(primary_key=True) 

这确保了整个数据库的独特性和数据完整性。以下是相应的documentation

对于这里教育目的是可以覆盖默认行为方式:

my_field = models.AutoField(primary_key=True) 

注意

此外,人们往往不认为这是什么大不了的事。但有时真的可以成为一个真正想想它的人生救世主。因为堆栈上有很多问题询问如何恢复这种行为。

+0

很有见地,谢谢! –

所有型号(包括您的作业型号)都有一个唯一的主键字段,默认情况下称为id

+0

韦尔普,这是非常简单。谢谢丹尼尔! –