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


  • administrators

    Để xây dựng 1 form nhập liệu chúng ta cần làm các bước sau:

    1. Khai báo form class trong model tương ứng.
    2. Chuẩn bị URL/template cho trang nhập liệu.
    3. Chuẩn bị view để lấy dữ liệu của form từ view tương ứng để lưu vào database.
    4. Hoàn thiện form
    

    1. Khai báo form class cho model tương ứng

    Chúng ta sẽ bắt đầu với app category.

    Khai báo form trong category/models.py:

    Thêm vào model các dòng khai báo form như sau:

    # Other import ...
    from django import forms
    
    # Model code ...
    class CategoryForm(forms.ModelForm):
        title = forms.CharField(label='Title', min_length=3, max_length=100, strip=True)
        order = forms.IntegerField(label='Order', min_value=1)
    
        class Meta:
            model = Category
            fields = ['title', 'order']
    
    2. Khai báo url template cho form bạn sẽ gửi lên server

    Sửa hàm index trong file category/views.py

    def index(request):
        return render(
            request,
            'category/index.html'
        )
    

    Và sửa file category/urls.py

    from django.conf.urls import url
    from category import views as category_views
    
    
    urlpatterns = (
        url(
            r'^$',
            category_views.index,
            name='index'),
    )
    

    Đưa nội dung vào trang category/templates/category/index.html

    <h1>Category page</h1>
    <ul>
        <li><a href="{% url 'home:index' %}">Back</a></li>
    </ul>
    

    Và thêm url của category vào home page tại: home/templates/home/index.html

    <ul>
        <li><a href="{% url 'category:index' %}">Category</a></li>
    </ul>
    

    Thêm URL của category vào file core/urls.py

    # Other URL here
    url(
            r'^category/',
            include('category.urls', namespace='category'))
    # Other URL here
    

    3. Chuẩn bị view nhận dữ liệu từ form

    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    from category.models import Category
    from category.models import CategoryForm
    
    
    def index(request):
        data = {}
        if request.method == 'POST':
            form = CategoryForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/category/success')
        else:
            form = CategoryForm()
        list_item = Category.objects.all()
        data['id'] = None
        data['list_item'] = list_item
        data['form'] = form
        return render(
            request,
            'category/index.html',
            data
        )
    
    def success(request):
        return render(
            request,
            'category/success.html'
        )
    

    Trong đoạn code trên, khi form được gửi thành công thì sẽ được redirect tới trang thông báo thành công (trang success).

    Để khai báo trang này ta tạo 1 file tên lại category/templates/category/success.html

    Nội dung file success.html:

    <h1>Category created</h1>
    <ul>
        <li>
            <a href="{% url 'category:index' %}">Back to category</a>
        </li>
    </ul>
    

    Sau đó khai báo view này trong category/urls.py

    url(
            r'^success$',
            category_views.success,
            name='success'),
    

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.