Когда я редактирую отдельную запись в шаблон с помощью формы django, она не редактируется - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть две модели ребенка и академия, благодаря которым эти две модели связаны друг с другом

вот дочерние модели

from django.db import models
class Child_detail(models.Model):
    Firstname = models.CharField(max_length = 50)
    Lastname = models.CharField(max_length = 50)
    Tribe = models.CharField(max_length = 50)

    def __str__(self):
        return self.Firstname

Вот модель академии

from django.db import models
from child.models import Child_detail
class Academic(models.Model):
    Student_name = models.ForeignKey(Child_detail,on_delete = models.CASCADE)
    Class = models.CharField(max_length =  50)
    Average_grade = models.CharField(max_length = 10)

    def __str__(self):
        return str(self.Student_name)

Вот мой файл views.py, который содержит функциональность edit , в шаблоне он не отображает поля для редактирования, поэтому я должен снова написать эти поля и даже сделать это ничего не редактировать

def edit_academy(request,pk):
    child=get_object_or_404(Child_detail,pk=pk)
    form = AcademicForm(instance=child)
    if request.method == "POST":
        form=AcademicForm(request.POST,instance=child)
        if form.is_valid():
           form.save()
           return redirect('more',pk=pk)
    context={
        'form':form,
        'child':child
    }    
    return render(request,'functionality/edit.html',context) 

Вот мой файл шаблона

{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}

{% block content %}

<section id="register" class="bg-light py-5">
  <div class="container">
    <div class="row">
      <div class="col-md-6 mx-auto">
        <div class="card">
          <div class="card-header bg-primary text-white">
            <h4>
              <i class="fas fa-user-plus"></i> Edit {{child.Firstname | title}} {{child.Lastname | title}} Academic Details </h4>
          </div>
          <div class="card-body">
            <form action="" method="post" autocomplete="on">
            {% csrf_token %}
            <div class="form-group">
              {{form | crispy}}
              <input type="submit" value="Save" class="btn btn-primary btn-block">
            </form>
            </div>
            </div>
            </div>
            </div>
          </section>

{% endblock %}

А вот мой файл формы Academi c

class AcademicForm(forms.ModelForm):
    class Meta:
        model=Academic
        fields='Class','Date','Average_grade','Overall_position','Total_number_in_class'
        labels={
            'Average_grade':'Average Grade',
            'Overall_position':'Overall Position',
            'Total_number_in_class':'Total Number In Class'
        }

1 Ответ

0 голосов
/ 15 апреля 2020

Попробуй так:

def edit(request,pk):
    child=get_object_or_404(Child_detail,pk=pk)
    form = ChildForm(instance=child)
    if request.method == "POST":
        form=ChildForm(request.POST,instance=child)
        if form.is_valid():
           form.save()
           return redirect('child')
    context={
        'form':form,
        'child':child
    }    
    return render(request,'functionality/edit.html',context)
...