【发布时间】:2018-09-26 05:01:31
【问题描述】:
我有两个相关的班级(表)学校和学生(外键) 当我创建一个新学生时,我希望它自动填充学校字段(这是学校类(表)中名称字段的外键,因为它已经链接到学校。 我试过 def get_initial(self): 没有运气(它给了我错误)。如果有人能指出我做错了什么……谢谢 模型.py:
class School(models.Model):
school_pk = models.AutoField(primary_key=True)
name = models.CharField(max_length=256)
principal = models.CharField(max_length=256)
location = models.CharField(max_length=256)
def __str__(self):
return str(self.name)
def get_absolute_url(self):
return reverse("basic_app:school_detail",kwargs={'school_pk':self.school_pk})
class Student(models.Model):
student_pk = models.AutoField(primary_key=True)
name = models.CharField(max_length=256)
age = models.PositiveIntegerField()
school = models.ForeignKey(School,related_name='students',on_delete=models.CASCADE,default=None)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("basic_app:student_detail",kwargs={'student_pk':self.student_pk,'school':self.school})
views.py:
class StudentCreateView(CreateView):
fields = ("name","age","school")
model = models.Student
template_name = 'basic_app/student_form.html'
pk_url_kwarg = 'student_pk'
slug_url_kwarg='school'
def get_initial(self):
school = get_object_or_404(models.School, school_pk=self.kwargs.get('school_pk'))
return {
'school':school,
}
【问题讨论】:
-
请显示您的网址格式。为什么
CreateView中有pk_url_kwarg = 'student_pk'?该对象尚未创建,因此它还没有主键。slug_url_kwarg='school'是干什么用的? -
@Alasdair
path('<slug:school>/<int:student_pk>/',views.StudentDetailView.as_view(),name='student_detail'), path('<slug:school>/create/',views.StudentCreateView.as_view(),name='student_create'),...所以我的代码可以工作,但我必须为每个学生手动选择学校..这没有意义..因为我已经在学校里了......我什么想做的只是用学校名称自动填写学校字段 -
请不要在 cmets 中发布代码。 Edit 你的问题。
标签: python django django-class-based-views