2017-08-03 60 views
0

我的看法是这样的:Django主键错误?

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 

我的问题是,一切都运行良好,但在我的模型我已经添加了几个对象(防爆学生。 objects.create(name ='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

删除对象的基值不会重新分配删除主键已经存在的对象。

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

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

mysql> ALTER TABLE <table_name> AUTO_INCREMENT = 1;