外键对象是否有唯一的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)
注意
此外,人们往往不认为这是什么大不了的事。但有时真的可以成为一个真正想想它的人生救世主。因为堆栈上有很多问题询问如何恢复这种行为。
所有型号(包括您的作业型号)都有一个唯一的主键字段,默认情况下称为id
。
韦尔普,这是非常简单。谢谢丹尼尔! –
很有见地,谢谢! –