Phần 2: Sử dụng Form Class Trong Python


  • administrators

    4. Hoàn thiện Form

    Cuối cùng là khai báo form để nhập liệu và danh sách các category được lưu trong database.

    Sửa lại nội dung trang category/templates/category/index.html thành:

    <h1>Category page</h1>
    <ul>
        <li><a href="{% url 'home:index' %}">Back</a></li>
    </ul>
    <form action="{% url 'category:index' %}" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>
    {% if list_item|length %}
    <table border=1 style="width: 100%; border-collapse: collapse">
        {% for item in list_item %}
        <tr>
            <td>{{ item.title }}</td>
            <td>{{ item.order }}</td>
        </tr>
        {% endfor %}
    </table>
    {% endif %}
    

    5. Cập nhật và xóa dữ liệu trong list view:

    Thêm 2 view dùng cho việc update và remove dữ liệu trong category/views.py

    def update_item(request, id):
        data = {}
        try:
            selected_item = Category.objects.get(pk=id)
            form = CategoryForm(instance=selected_item)
        except Category.DoesNotExist:
            raise Http404("This item not exist.")
        if request.method == 'POST':
            form = CategoryForm(request.POST or None, instance=selected_item)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/category/success')
        list_item = Category.objects.all()
        data['id'] = id
        data['list_item'] = list_item
        data['form'] = form
        return render(
            request,
            'category/index.html',
            data
        )
    
    def remove_item(request, id):
        data = {}
        try:
            selected_item = Category.objects.get(pk=id)
            selected_item.delete()
            form = CategoryForm()
        except Category.DoesNotExist:
            raise Http404("This item not exist.")
        list_item = Category.objects.all()
        data['id'] = None
        data['list_item'] = list_item
        data['form'] = form
        return HttpResponseRedirect('/category', data)
    

    Khai báo thêm 2 route tương ứng trong category/urls.py

    url(
        r'^update/(?P<id>[\d]+)$',
        category_views.update_item,
        name='update'),
    url(
        r'^remove/(?P<id>[\d]+)$',
        category_views.remove_item,
        name='remove'),
    

    Sửa lại trang index form nhập liệu trong category/templates/category/index.html

    <h1>Category page</h1>
    <ul>
        <li><a href="{% url 'home:index' %}">Back</a></li>
    </ul>
    {% if id == None %}
        <form action="{% url 'category:index' %}" method="post">
    {% else %}
        <form action="{% url 'category:update' id=id %}" method="post">
    {% endif %}
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>
    {% if list_item|length %}
    <table border=1 style="width: 100%; border-collapse: collapse">
        {% for item in list_item %}
        <tr>
            <td>{{ item.title }}</td>
            <td>{{ item.order }}</td>
            <td><a href="{% url 'category:update' id=item.id %}">Edit</a></td>
            <td><a href="{% url 'category:remove' id=item.id %}">Remove</a></td>
        </tr>
        {% endfor %}
    </table>
    {% endif %}
    

    Cảm ơn bạn đã theo dõi bài viết.


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới Cộng đồng Python Việt Nam, vui lòng đợi một lúc để chúng tôi thử kết nối lại.