I am new to django and building an user (named "Developer") settings update page. I used model form and passed the settings instance via views.py hoping them to show up in the rendered template for users (named "Developer") to edit. But the instance value is not populated into the template in form.as_p.
I have tested the {{project_form.instance.pk}} is passing the correct project instance, so I am expecting the project name to show up as default value in the form for user input project name, but it is showing blank.
models.py (simplified)
class Project(models.Model):
project_name = models.TextField(unique=True)
class Developer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE, default=Project.get_default_project)
institution = models.ForeignKey(Institution, on_delete=models.CASCADE, null=True, blank=True)
forms.py
class ProjectForm(ModelForm):
class Meta:
model = Project
fields = ['project_name']
views.py
def developerSettingsUpdate(request):
from .forms import ProjectForm
developer = request.user.developer
project = developer.project
if request.method == 'POST':
project_form = ProjectForm(request.POST, instance=project)
if project_form.is_valid():
project_form.save()
else:
project_form = ProjectForm(instance=project)
return render(request,
'decg/developer_settings.html',
{
'project_instance': project,
'project_form': project_form,
})
developer_settings.html
<div>
<h5>Expecting this field to show instance: {{ project_form.instance.project_name }}</h5>
</div>
<form method="post">
{% csrf_token %}
{{ project_form.as_p }}
<button class="button" type="submit">Update</button>
</form>
But it is showing blank: see Screenshot of rendered developer_settings.html: