То, что я хочу сделать, это обновить во всплывающем шаблоне, только поле «комментарии», и показать не все поля ионной модели, но когда я отправляю форму, поля, которых нет в шаблоне, становятся нулевыми в БД .
Я использую UpdateView, правильно ли я использую это или лучше, если я делаю это по-другому, я открыт для предложений.
Эти поля получают значение Null: idSupervisor_cotas idSupervisor_juntas fecha_sup_cotas fecha_sup_juntas
Модель:
class Pieza(ClaseModelo):
reporte = models.ForeignKey(Reporte, on_delete=models.CASCADE)
noPieza = models.PositiveIntegerField()
descripcion = models.CharField(
max_length=100,
help_text="Descripcion de la Pieza",
unique=False
)
comentarios = models.CharField(
max_length=255,
help_text="Comentarios de la Pieza",
blank=True, null=True,
unique=False
)
idSupervisor_cotas = models.ForeignKey(
Supervisor,
on_delete=models.CASCADE,
blank=True, null=True,
related_name='sup_cotas'
)
fecha_sup_cotas = models.DateTimeField(blank=True, null=True)
idSupervisor_juntas = models.ForeignKey(
Supervisor,
on_delete=models.CASCADE,
blank=True, null=True,
related_name='sup_juntas')
fecha_sup_juntas = models.DateTimeField(blank=True, null=True)
noCotas = models.IntegerField(null=True, blank=True)
noJuntas = models.IntegerField(null=True, blank=True)
def __str__(self):
return '{}:[{}]({})'.format(self.reporte.numeroReporte, self.noPieza, self.descripcion)
def save(self, **kwargs):
if not self.noPieza:
noPieza = cal_key(self.reporte, 1)
self.noPieza = noPieza+1
self.descripcion = self.descripcion.upper()
super(Pieza, self).save()
class Meta:
verbose_name_plural="Piezas"
unique_together = ("noPieza", "reporte")
Форма:
class PiezaForm(forms.ModelForm):
# MOstramos solo los reportes que no esten Terminados.
reporte = forms.ModelChoiceField(
queryset=Reporte.objects.filter(state=False)
)
#fecha_sup_juntas = forms.DateTimeField(input_formats=['%d/%m/%Y %H:%M'])
class Meta:
model= Pieza
fields = ['reporte', 'descripcion', 'comentarios', 'state', 'idSupervisor_cotas', 'idSupervisor_juntas', 'fecha_sup_cotas', 'fecha_sup_juntas']
labels = {'reporte': 'Numero de Reporte', 'descripcion':'Descripcion de la Pieza', 'state':'Estado'}
widget = {
'descripcion':forms.TextInput,
'fecha_sup_cotas':forms.DateField(input_formats=['SHORT_DATE_FORMAT']),
'fecha_sup_juntas':forms.DateTimeField(input_formats=['SHORT_DATE_FORMAT'])
}
def __init__(self, *args, **kwargs):
super().__init__(*args,**kwargs)
for field in iter(self.fields):
self.fields[field].widget.attrs.update({
'class':'form-control'
})
self.fields['reporte'].empty_label = "Seleccione Reporte"
Вид:
class AddComment(LoginRequiredMixin, generic.UpdateView):
model = Pieza
template_name = "core/pieza_comment_form.html"
context_object_name = "obj"
form_class = PiezaForm
def form_invalid(self, form):
print(form.errors)
response = super().form_invalid(form)
if self.request.is_ajax():
return JsonResponse(form.errors, status=400)
else:
return response
def get_success_url(self):
return reverse_lazy('core:pieza_detalle', kwargs={'id_pieza': self.object.id})
Шаблон:
<div class="modal-dialog modal-md">
<div class="modal-content">
<form method="POST" role="form" class="form" enctype="multipart/form-data" action="{% url 'core:add_comment' obj.pk %}" >
{% csrf_token %}
<div class="col-12 col-lg-12 d-flex">
<div class="card flex-fill w-100">
<div class="card-body">
<div class="form-row">
<div class="form-group col-md-6" >
<label for="descripcion"> Reporte : Pieza </label>
<input class="form-control" type="text" value="{% if obj %} {{obj}} {% endif %}" readonly/>
</div>
<div class="form-group col-md-2" >
<label for="reporte"> No: </label>
<input class="form-control" type="text" name="pieza" id="id_pieza" value="{% if obj %} {{obj.noPieza}} {% endif %}" readonly/>
</div>
<div class="form-group col-md-4">
<label for="reporte"> Descripcion: </label>
<input class="form-control" type="text" name="descripcion" id="id_descripcion" value="{% if obj %} {{obj.descripcion}} {% endif %}" readonly/>
</div>
</div>
<div class="form-row">
<input class="form-control" type="text" name="reporte" id="id_reporte" value="{% if obj %} {{obj.reporte.id}} {% endif %}" hidden/>
<label for="id_comentarios">Comentarios:</label>
{{form.comentarios}}
</div>
</div>
<div class="card-footer">
<div class="text-center mt-3">
<button type="submit" class="btn btn-lg btn-success">Guardar</button>
<button type="button" class="btn btn-lg btn-danger" onclick="return cerrar_modal()">
Cancelar
</button>
</div>
</div>
</div>
</div>
</form>
<script>
$(function() {
$('input[name="fecha_sup_juntas"]').daterangepicker({
singleDatePicker: true,
showDropdowns: true,
minYear: 1901
});
});
</script>
</div>