현재 편집 양식을 상세보기와 동일한 페이지에서 Django
으로 작업하려고합니다.동일한 페이지에 편집 양식과 상세보기가 있습니다
현재 문서에서 권장되는대로 (예 : FormMixin
사용) 시도하고 있습니다.
class ProductiveMinutesDetail(FormMixin, DetailView):
model = models.ProductiveMinutes
pk_url_kwarg = 'productiveminutes_pk'
form_class = forms.EditForm
def get_success_url(self):
return reverse_lazy('productiveminutes_list')
def get_context_data(self, **kwargs):
context = super(ProductiveMinutesDetail, self).get_context_data(**kwargs)
context['form'] = forms.EditForm(initial={'post': self.object})
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
form.save()
return super(ProductiveMinutesDetail, self).form_valid(form)
그리고 내 양식은 다음과 같습니다 : 그래서, 내보기는 다음과 같습니다
class Scenario(models.Model):
name = models.CharField(max_length=200)
class ProductiveMinutes(models.Model):
scenario = models.OneToOneField(Scenario)
name = models.CharField(max_length=200)
amount = models.DecimalField(max_digits=50, decimal_places=2)
description = models.CharField(max_length=200)
이 내가 얻을 수 있습니다 사용 :
이from django import forms
from . import models
class EditForm(forms.ModelForm):
class Meta:
model = models.ProductiveMinutes
fields = ('name', 'description',)
내가 사용하고 모델이있다 양식을 페이지에 렌더링 할 수 있지만 이미 존재하는 데이터로 채워지기를 원할 때 필드가 비어있는 것처럼 잘못된 작업을하고 있음을 알고 있습니다.
복잡성의 또 다른 부분은이 양식이 name
및 description
모델의 amount
필드를 편집하지 않아야한다는 것입니다. amount
값은이 페이지의 상세보기와 별도로 편집됩니다.
그래서 내 주요 질문은 이미 존재하는 모델 필드의 데이터로 채워지도록 양식을 가져온 다음 편집 할 수있는 것입니다. Django가 제공하는 일반 UpdateView
과 같은 이상적인 기능입니다.
나는 이것에 어떤 도움이 많은 시간에 대한
감사 감사하겠습니다 1.10
장고 버전을 사용하고
UPDATE :
내 템플릿은 다음과 같습니다:
{% extends 'pages/dashboard.html' %}
{% load i18n humanize crispy_forms_tags %}
{% block content %}
<div>
<h1 class="text-center">Productive Minutes: {{ productiveminutes.name }}</h1>
<div class="row">
<div class="col"></div>
<div class="col-md-8 col-lg-8">
<h3>Edit productive minutes: {{ productiveminutes.name }}</h3>
<form role="form" method="post">
{% csrf_token %}
{{ form|crispy }}
<button class="primaryAction btn btn-primary pull-right" type="submit">{% trans "Submit" %}</button>
</form>
</div>
<div class="col"></div>
</div>
<hr>
<div class="row">
<div class="col"></div>
<div class="col-md-8 col-lg-8">
<h3>Data Records</h3>
<div class="table-responsive">
<table class="table table-bordered">
<thead class="thead-default">
<tr>
<th>ID</th>
<th>Productive Minutes</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ productiveminutes.id }}</td>
<td>{{ productiveminutes.amount|intcomma }}</td>
<td>
<a href="#"><i class="fa fa-pencil"></i></a>
<a href="#"><i class="fa fa-trash"></i></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="col"></div>
</div>
</div>
{% endblock content %}
'post'를 무시해서는 안됩니다. 베이스 뷰와 믹스 인이이를 정의합니다. –
Django 문서의 예제를 적용 할 때 다음과 같이 말합니다. 'ViewMixin을 사용하고 DetailView와 FormView를 혼합하여 사용하려고하지 않고 post()를 구현합니다. 이미 적절한 post()를 제공합니다. '), 그리고 일들이 훨씬 더 혼란스러워 질 것입니다. '그렇습니다. 아마 그렇게하는 것이 최선의 방법이 아니라는 것에 동의합니다. – BeeNag