我有这样的观点:
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中。
答案 0 :(得分:1)
删除对象不会将已删除的主键重新分配给现有对象。
例如,如果删除pk = 1的对象,pk = 2的对象将不会更改为1.如果添加新对象,则pk将为3,因为它是自动增量计数器
这就是数据库系统的设计方式。这绝不会妨碍django应用程序的工作。如果你这么烦恼,你可以手动重置自动增量计数器,保持数据不变。
mysql> ALTER TABLE <table_name> AUTO_INCREMENT = 1;