چگونه در جنگو منوی بازشونده یا dropdown بسازیم؟ (فرم و مدل)

سلام

هدف این است که می خواهیم یک لیست بازشونده با تعداد محدودی اختیار را در فرم به کاربر نمایش دهیم. شاید این راه به ذهن برسد که فیلد را از نوع متنی در نظر می گیریم و در قسمت فرانت اند صرفاً گزینه های خود را به کاربر نمایش می دهیم که البته مسلماً این نمی تواند راه درستی باشد چون کاربر با اندکی تغییر می تواند هر داده ای را به سمت سرور ارسال کند. (کافی است فرم را tamper کند یا به صورت آنلاین html را تغییر دهد.)

راه حل بعدی این است که بعد از رسیدن داده به سرور نیز چک کنیم که دادۀ ارسالی صرفاً شامل موارد مجاز باشد و در غیر اینصورت درخواست را رد کنیم.

این راه صحیح است اما نیازی به این کار نیست؛ چون جنگو با استفاده از امکان choices باعث شده به راحتی این کار انجام شود.

urls.py

url(r'^formpage$', home_views.formpageview, name='formpage'),

models.py

from django.db import models

# Create your models here.
CAT_CHOICES = (
    ('academic','ACADEMIC'),
    ('poem', 'POEM'),
    ('novel','NOVEL'),
)
class Book(models.Model):
    Category = models.CharField(max_length=11, choices=CAT_CHOICES, default='poem')

forms.py

from django import forms
from .models import Book

class MyModelForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ['Status']

views.py

from django.shortcuts import render
from .models import Book
from .forms import MyModelForm


def formpageview(request):
    return render (request, 'template.html',{'form':MyModelForm})

template.html

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Create" />
</form>

برای نمایش صرفاً این فیلد هم از کد زیر استفاده می کنیم

{{ form.category}}

 

نویسنده:تمدن

 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگو شرکت کنید؟
نظری بدهید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *