Django primery键错误?

时间:2017-08-03 08:06:44

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

我有这样的观点:

def Student_list(request):

    s = Student.objects.all()
    return render(request, 'test_m/test.html', {'s':s})


def Student_info(request, pk):

    C_Details = Student_details.objects.filter(student__pk=pk)
    return render(request, 'test_m/S_info.html', {'C_Details': C_Details})

和Models.py像这样:

models.py

from __future__ import unicode_literals

from django.db import models



class Student(models.Model):

    name = models.CharField(max_length=200)
    def __unicode__(self):
        return self.name


class Student_details(models.Model):

    student = models.ForeignKey(Student,on_delete=models.CASCADE)
    age = models.CharField(default= 'No Data',max_length=254)
    per = models.CharField(default= 'No Data', max_length=254)


    def __unicode__(self):
        return self.per

我的问题是一切都运行正常但在我的模型中我添加了几个对象(Ex Student.objects.create(名称=' John')),并且删除了时间。现在发生了什么我的模型中只有一个对象。但当它返回模板的主键以呈现网址时:

   url(r'^test_m/(?P<pk>\d)/$', views.Student_info, name='Student_info'),

  <td><a href="{% url 'Student_info' pk=s.pk %}"> </a></td> <br>
    </tr>

它应该将主键显示为1但显示主键为13,因此无法呈现URL。

如果我向学生添加另一个对象,它会显示14,依此类推,所以基本上它将每个新条目添加到基础值12中。

1 个答案:

答案 0 :(得分:1)

删除对象不会将已删除的主键重新分配给现有对象。

例如,如果删除pk = 1的对象,pk = 2的对象将不会更改为1.如果添加新对象,则pk将为3,因为它是自动增量计数器

这就是数据库系统的设计方式。这绝不会妨碍django应用程序的工作。如果你这么烦恼,你可以手动重置自动增量计数器,保持数据不变。

mysql> ALTER TABLE <table_name> AUTO_INCREMENT = 1;