In short: I want to autofill form's foreign variable:
TL;DR
Here is project link.
I have a model:
from django.db import models
from django.urls import reverse
# Create your models here.
class School(models.Model):
name = models.CharField(max_length=256)
principal = models.CharField(max_length=256)
location = models.CharField(max_length=256)
def __str__(self): return self.name
def get_absolute_url(self):
return reverse('basic:detail', kwargs={'pk': self.pk})
class Student(models.Model):
name = models.CharField(max_length=256)
age = models.PositiveIntegerField()
school = models.ForeignKey(School, on_delete=models.CASCADE, related_name='students')
def __str__(self): return self.name
def get_absolute_url(self):
return reverse('basic:detail', kwargs={'pk': self.school.pk})
and url.py:
urlpatterns = [
path('', views.Index.as_view(), name='index'),
path('list/', views.SchoolListView.as_view(), name='list'),
path('<int:pk>/', views.SchoolDetailView.as_view(), name='detail'),
path('create/', views.SchoolCreateView.as_view(), name='create'),
path('update/<int:pk>/', views.SchoolUpdateView.as_view(), name='update'),
path('delete/<int:pk>/', views.SchoolDeleteView.as_view(), name='delete'),
path('student/create/', views.StudentCreateView.as_view(), name='creates'),
path('student/create/<int:pk>', views.StudentCreateView.as_view(), name='createspk'),
path('student/update/<int:pk>/', views.StudentUpdateView.as_view(), name='updates'),
path('student/delete/<int:pk>/', views.StudentDeleteView.as_view(), name='deletes'),
]
and i am using CBV:
class StudentCreateView(CreateView):
try:
print("*******")
print(pk)
except:
pass
model = Student
fields = ["name", "age", 'school']
I added a link to create student in school detail as shown below:
When I click create new with pk, I am passing pk of School and I go to:
As you can see School field is dropdown with nothing selected, I would like to make that the school default value to be the school from where it is called, in this case xavier school for gifted childrens.
My create student code is:
{% extends "basic/base.html" %}
{% block content %}
<h1>
{% if not form.instance.pk %}
Create Student:
{% else %}
Update Student:
{% endif %}
</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" class="btn btn-primary">
</form>
{% endblock content %}
How can I do that? Thanks in advance.