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

时间:2017-10-19 14:48:07

标签: django django-models django-templates django-views

我正在创建一个工作板站点,其中所有作业都显示在列表中,每个作业都是一个链接,指向显示有关作业的更多信息的页面。

我有以下型号:

private void DpTimerTick_GetEnemyAmmo(object sender, EventArgs e)
{
    lstBEnemies.SelectedItem = EnemyList[0];
}

Views.py:

<Label Content="{Binding SelectedItem.Ammo, ElementName=lstBEnemies}" />

在index.html上,可用作业列为:

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

我希望这些是可点击的链接,这会将用户带到另一个页面,为他们提供有关该作业的更多详细信息。我认为我需要def index(request): jobs = Job.objects.all return render(request, 'core/index.html', {'jobs' :jobs }) 个对象的某种id值来实现这一点,但我可能错了。有谁知道怎么做这个?注意:我之前使用 <table> <tbody> {% for job in jobs %} <tr> <td><a href="#">{{ job.job_title}} - {{ job.establishment_name }}</a></td> </tr> {% endfor %} </tbody> </table> 做了类似于用户ID的操作,但是如何使用Job个对象执行此操作?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

只想澄清一下,以便了解幕后发生的事情。

Id字段不是魔法

事实上,Django正在为你添加一个字段。每次创建模型Django都会添加以下字段:

id = models.AutoField(primary_key=True)

这确保了数据库的唯一性和数据完整性。这是相应的documentation

出于教育目的,这里可以覆盖默认行为:

my_field = models.AutoField(primary_key=True)

注意

此外,人们通常不认为这是一个大问题。但是,有时它真的可以成为一个真正考虑它的生命救星。因为Stack上有很多问题要求如何恢复这种行为。