首页 > 解决方案 > 基于django更新函数的多个模型视图

问题描述

我有一个父模型和两个子模型,我创建了一个视图来将多个子添加到一个父级,但是我对为所有子级的父级创建更新视图感到困惑

这是创建多个子views.py的形式

def create_day_view(request,pk):
    mydate = get_object_or_404(MyDate,pk=pk)
    if request.method == 'POST':
        length = request.POST.get('length')
        sof_zman_1 = request.POST.get('sof_zman_1')
        sof_zman_2 = request.POST.get('sof_zman_2')
        sof_zman_tefila = request.POST.get('sof_zman_tefila')
        ad_image = request.POST.get('ad_image')

        day_details = MyDateDetails.objects.create(
            date = mydate,
            sof_zman_1 = sof_zman_1,
            sof_zman_2 = sof_zman_2,
            sof_zman_tefila = sof_zman_tefila,
            ad_image = ad_image,
        )
        
        for file_num in range(0, int(length)):
            Image.objects.create(
                date = mydate,
                image = request.FILES.get(f'images{file_num}')
            )

    context = {'mydate': mydate}
    return render(request, 'luach/create_day.html',context=context)

我正在共享模板,以便您了解表单的工作原理 create_day.html

{% extends 'luach/base.html' %}
{% block content %}
<div class='container'>
    <div class="jumbotron myjumbotron">
        <div class="p-3 mb-2 bg-light text-center " style="border-radius: 10px;">
            <h1 class='title-date text'>{{mydate.hebrew_date}}</h1>
            <h4 class='english-date'>{{mydate.english_date}}</h4>
        </div>
        <label>sof zman 1</label>
        <div class="row">
            <div class="col">
                <input type="time" id="sof_zman_1" class="form-control">
            </div>
            <div class="col">
            </div>
        </div>
        <label>sof zman 2</label>
        <div class="row">
            <div class="col">
                <input type="time" id="sof_zman_2" class="form-control">
            </div>
            <div class="col">
            </div>
        </div>
        <label>sof zman tefila</label>
        <div class="row">
            <div class="col">
                <input type="time" id="sof_zman_tefila" class="form-control">
            </div>
            <div class="col">
            </div>
        </div>
        <br>
        <!--<label>ad image</label>
        <input type="file" id="ad_image">-->
        <br>
        <label>Images</label>
        <br>
        <div class="row">
            <div class="col">
                <input type="file" multiple>
            </div>
            <div class="col">
            </div>
        </div>
        <button type="submit" id="saveBtn" class="btn btn-primary mt-4">Save</button>
    </div>
</div>
<script>
    document.addEventListener('DOMContentLoaded', function() {
        var files = []
        FilePond.registerPlugin(FilePondPluginFileValidateSize);
        FilePond.registerPlugin(FilePondPluginFileValidateType);
        FilePond.setOptions({
            allowMultiple:true,
            maxFiles:10,
            maxFileSize: '10MB'
        })
        const inputElement = document.querySelector('input[type="file"]');
        const pond = FilePond.create( inputElement, {
            acceptedFileTypes:['image/png', 'image/jpeg','image/jpg'],
            onaddfile: (err, fileItem) => {
                if (!err) {
                files.push(fileItem.file)
                }
                console.log(files)
            },
            onremovefile: (err, fileItem) => {
                const index = files.indexOf(fileItem.file)
                if (index > -1) {
                    files.splice(index, 1)
                }
                console.log(files)
            }
        } );

        var formData = new FormData();
        $(document).on('click', '#saveBtn', function(e) {
            formData.append('length', files.length)
            formData.append('sof_zman_1', $('#sof_zman_1').val())
            formData.append('sof_zman_2', $('#sof_zman_2').val())
            formData.append('sof_zman_tefila', $('#sof_zman_tefila').val())
            formData.append('ad_image', $('#ad_image').val())
            for (var i = 0; i < files.length; i++) {
                formData.append('images' + i, files[i])
            }
            formData.append('csrfmiddlewaretoken', '{{ csrf_token }}')

            $.ajax({
                type: 'POST',
                url: '{% url "day_new" pk=mydate.pk %}',
                data: formData,
                cache: false,
                processData: false,
                contentType: false,
                enctype: 'multipart/form-data',
                success: function (){
                    //alert('The post has been created!')
                    window.location.href = "{% url 'date_detail' pk=mydate.pk %}";
                },
                error: function(xhr, errmsg, err) {
                    console.log(xhr.status + ":" + xhr.responseText)
                }
            })
        })
    })
</script>
{% endblock  %}

标签: pythondjango

解决方案


推荐阅读