Django 新手指南:新增分類欄位的邏輯

更新日期: 2024 年 12 月 24 日

在 Django 應用中,為用戶創建或編輯內容時,經常需要處理與分類相關的下拉選單(如選擇服務的分類)。

本篇文章將說明如何在視圖、表單和模板中正確設置分類選項,並提供完整的處理流程,幫助新手輕鬆應對常見場景。


視圖邏輯

在創建服務(Service)時,需要以下處理:

  1. 傳遞分類資料至模板,以便生成下拉選單。
  2. 確保用戶提交的分類資料正確保存。

以下是視圖的範例:

from .models import Category
from .forms import ServiceForm
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required

@login_required
def create_service(request, id):
    # 確認用戶是否有權限操作
    if not has_permission(request, id):
        return redirect("services:error_page")

    # 獲取所有分類
    categories = Category.objects.all()

    # 處理表單提交
    if request.method == "POST":
        form = ServiceForm(request.POST, request.FILES)
        if form.is_valid():
            service = form.save(commit=False)
            service.freelancer_user = request.user
            service.save()
            return redirect("services:freelancer_dashboard", id=id)
    else:
        form = ServiceForm()

    return render(request, "services/create_service.html", {"form": form, "categories": categories})

說明

  1. 傳遞 categories 到模板:將所有分類資料傳遞給模板,以便生成分類下拉選單。
  2. 表單校驗與保存:在 POST 請求中處理用戶提交的數據,保存有效內容。
  3. 初始化空表單:對於非提交狀態(GET 請求),提供空表單顯示給用戶。

表單結構

以下是表單的處理範例,用於確保分類欄位正確顯示和提交。

from django import forms
from .models import Service

class ServiceForm(forms.ModelForm):
    class Meta:
        model = Service
        fields = ['name', 'description', 'category', 'price']

說明

  1. 包含分類欄位:確保表單中的 fields 列表包含 category 欄位,這樣分類欄位才能出現在表單中。

模板中的下拉選單

新建服務時,模板中的分類下拉選單應該提供所有分類供用戶選擇,並且預設「請選擇」選項為空。

以下是模板的範例:

<select
    id="category"
    name="category"
    class="bg-white text-gray-800 border border-gray-300 rounded-md p-2 w-full"
>
    <option value="" selected>請選擇</option>
    {% for category in categories %}
    <option value="{{ category.id }}">{{ category.name }}</option>
    {% endfor %}
</select>

說明

  1. 預設「請選擇」:為空選項設置 selected,避免表單初始化時誤選中第一個分類。
  2. 動態生成分類選項:透過模板語法 {% for category in categories %},迭代顯示分類列表。

六、總結

  1. 新建服務表單的處理
    • 傳遞分類至模板,生成分類選單。
    • 預設「請選擇」選項為空白,避免誤選。
  2. 設置初始值
    • 透過表單的 initial 參數設置默認分類,讓用戶快速選擇。

透過這些步驟,您可以構建一個功能完善的分類選單,讓系統更加清晰易用!

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *