У меня есть неуправляемая модель под названием Codemap
class Codemap(models.Model):
code_map_id = models.AutoField(primary_key=True)
field = models.CharField(max_length=255, null=True, blank=True)
class Meta:
managed = False
Я просто хочу знать, возможно ли здесь использовать modelformset_factory
, потому что при использовании has_changed()
поднимается AttributeError
forms.py
класс CodeMapFinal (ModelForm): def init (self, * args, ** kwargs): super (). init (* args, ** kwargs) self.queryset = Codemap.objects.all ()
class Meta:
model = Codemap
fields = '__all__'
views.py
class CodeMapView(View):
template_name = 'tabledata/code-map.html'
def get(self, request):
codemap = Codemap.objects.all()
codemap_formset = modelformset_factory(Codemap, form=CodeMapFinal, can_delete=True, exclude=['code_map_id', 'display_label', 'type'], extra=0)
return render(request, self.template_name, context={'rows': codemap, 'formset': codemap_formset})
def post(self, request):
formset = CodeMapFinal(request.POST)
if formset.is_valid():
instances = formset.save(commit=False)
return HttpResponse("asdfasdfasdf")
template. html
<div class="row">
<div style='background-color: #f2f2f2;' class="col-2">
<strong>Type</strong>
<ul>
{% for row in rows %}
<li><a href="#" onclick="show_type_specific({{row.code_map_id}})">{{row.type}}</a></li>
{% endfor %}
</ul>
<strong>Display Label</strong>
<ul>
{% for row in rows %}
<li><a href="#" onclick="show_display_specific({{row.code_map_id}})">{{row.display_label}}</a></li>
{% endfor %}
</ul>
</div>
<div class="w-100 col-4">
<table class="table table-bordered">
<tr>
<th>Index</th>
<th>Type</th>
<th>Input Value</th>
<th>Output Value</th>
<th>Display Label</th>
</tr>
<tbody class='table-body'>
{% for row in rows %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{row.type}}</td>
<td>{{row.input_value}}</td>
<td>{{row.output_value}}</td>
<td>{{row.display_label}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div id="form-div" hidden="hidden">
<h3>Code Map</h3>
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
<div id="form_set">
{% for form in formset %}
{{form.non_field_errors}}
{{form.errors}}
<table class='no_error'>
{{ form }}
</table>
{% endfor %}
</div>
<input type="button" class="btn btn-primary" value="Add More" id="add_more">
<button type="submit" class="btn btn-success">Save</button>
<div id="empty_form" style="display:none">
<table class='no_error'>
{{ formset.empty_form }}
</table>
</div>
</form>
</div>
{% endblock %}
{% block extrajs %}
<script type="text/javascript">
$('#add_more').click(function() {
var form_idx = $('#id_form-TOTAL_FORMS').val();
$('#form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx));
$('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
});
</script>
<script type="text/javascript">
function show_type_specific(id){
$(".table").find(`tr:eq(${id})`).remove();
$("#form-div").attr("hidden", false);
}
function show_display_specific(id){
$(".table").find(`tr:eq(${id})`).remove();
$("#form-div").attr("hidden", false);
}
</script>
{% endblock %}
Даже если я не использую has_changed()
, отправленная форма всегда сохраняет пустую запись.