Django - Использование django_filter и Django Forms вместе - PullRequest
0 голосов
/ 22 декабря 2018

Поэтому я пытаюсь выяснить, существует ли способ отфильтровать результаты базы данных с помощью django_filter, а затем (по тому же URL-адресу) использовать отфильтрованные результаты в форме для их редактирования.

У меня есть FilterSet, который работает отлично, и результаты представляют собой простой текст с кнопкой редактирования, которая приводит меня к другому URL-адресу, где я могу редактировать результаты в форме.Однако я хотел бы отредактировать результаты на той же веб-странице, чтобы редактировать их прямо сейчас.Так что в основном просто объединение фильтрации и редактирования на одной странице.Есть ли способ объединить оба шаблона?Вот часть моего кода.

my filters.py

class CSVFilter(django_filters.FilterSet):
    class Meta:
        model = Excel7
        fields = {'test1' : ['icontains'], 'test2' : 
['icontains'], 'test3' : ['icontains'], 'test4' : ['icontains']}

my forms.py

class DocumentForm(forms.ModelForm):

    test1= forms.CharField(required=False)
    test2= forms.CharField(required=False)
    test3= forms.CharField(required=False)
    test4= forms.CharField(required=False)
    test5= forms.CharField(required=False)
    test6= forms.CharField(required=False)
    test7= forms.CharField(required=False)
    test8= forms.CharField(required=False)
    test9= forms.CharField(required=False)

    class Meta:
        model = Excel7
        fields = ('test1', 'test2', 'test3', 'test4', 'test5',
                   'test6', 'test7', 'test8', 'test9', )

Представление, которое обрабатывает фильтрацию

def filter_location(request):
    user_list = Excel7.objects.values()
    user_filter = CSVFilter(request.GET, queryset=user_list)
    return render(request, 'excel/filter_port.html', {'filter': 
user_filter})

представление редактирования

def edit_port(request, id):
    instance = get_object_or_404(Excel7, id = id)
    form = DocumentForm(request.POST, instance=instance)
    m = Excel7.objects.filter(id = id).values()
    if request.method == 'POST':
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
        return redirect('excel:index')
    else:
        data = {
            'form': form, 'id': id, 'excel5': instance, 'model': m, 'test1' 
 : instance.test1,
            'test2' : instance.test2, 'test3' : 
instance.test3, 'test4' : instance.test4, 'test5' : instance.test5
        }
        form = DocumentForm(initial=data)
    return render(request, "excel/edit_entry.html", {'form' : form})

filter_port.html

<form method="get">
    {% csrf_token %}
    {{ filter.form.as_p }}
    <button type="submit">Search</button>
</form>
<ul>

  {% for excel5 in filter.qs %}
        <li>
     {{ excel5.test1}} - {{ excel5.test2}} - {{ excel5.test3}}
     - {{ excel5.test4}} - {{ excel5.test5}}

    <ul>
        <a href = "{% url 'excel:edit_results' excel5.id %}">
            <button>Edit</button>
        </a>
    </ul>
        </li>

  {% endfor %}
</ul>

edit_entry.html

<h2>Edit Entry {{id}} </h2>

<form method="POST" enctype="multipart/form-data" action="">
    {% csrf_token %}
    {{ form.test1}}
    {{ form.test2}}
    {{ form.test3}}
    {{ form.test4}}
    {{ form.test5}}
    <button type="submit">Save</button>
</form>
<ul>
{% for excel5 in model %}
    {{excel5.test1}} - {{ excel5.test2}}
     - {{ excel5.test3}} - {{ excel5.test4}}
     - {{ excel5.test5}}

</ul>
{% endfor %}

<a href = "{% url 'excel:index' %}">
<button>Cancel</button>
</a>

Любая помощь будет оценена

...