Django - После нажатия кнопки «Отправить» в шаблоне только с одним полем модели остальные значения обнуляются - PullRequest
0 голосов
/ 01 мая 2020

То, что я хочу сделать, это обновить во всплывающем шаблоне, только поле «комментарии», и показать не все поля ионной модели, но когда я отправляю форму, поля, которых нет в шаблоне, становятся нулевыми в БД .

Я использую 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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...