فرم های Dynamic در جنگو

درود
فرم را با Jquery نوشتم که فیلد ها بر اساس انتخاب کاربر برای مثال مجرد و یا متاهل بودند تغییر میکنه و همچنین در بخش هایی کاربر امکان اضافه کردن فیلد داره اما نمیدونم چطور باید این فرم را به جنگو متصل کنم. در سمت جنگو هم پردازش خاصی روی فرم انجام نمیشه و صرفا تمام فیلد های به همراه مقدارشون در پنل مدیریت باید نمایش داده بشند.

ممنون میشم راهنمایی کنید

1 Likes

سلام دوست عزیز
اینکه چطور یه وب سرویس بنویسید و از اون، در اپ کلاینت استفاده کنید جز مفاهیم خیلی پایه ای هست، به نظرم اگر برید سراغ یه آموزش خوب که مفاهیم پایه ای رو یاد بگیرید خیلی سریعتر پیش میرید تا اینکه توی فروم ها مطرح کنید

شما لازم نیست حتما فرمها رو «اضافه» کنید. فیلدها میتونن توی صفحه باشن و مثلا display=none باشن، وقتی گزینه‌ای زده میشه، اونا display=block بشن و کاربر ببیندشون.
از اونجایی که پردازشی قرار نیست روی فرم‌ها انجام بشه و حدث میزنم همینطوری صاف قراره بشینه توی دیتابیس و نیازی نیست که مثلا متاهلها و مجردها جدولشون جدا باشه، پس این روشی که گفتم میتونه جوابگو باشه.
فقط شاید لازم باشه بعد از ظاهر و غیب کردن فرمها، اونها رو پاک کنید که کاربر اگه یه چیزی رو نوشته بعد یادش افتاده وضعیت تاهل رو تغییر بده، اطلاعات اضافی توی فرم نباشه.

برای کار پیچیده‌تر، مثلا اینکه واقعا فرمها با توجه به state، ایجاد یا پاک بشن، بهتره از لایبرریهایی مثل react استفاده کنید که البته خیلی بزرگ و پیچیده و سنگین‌تر از jquery هست و برای وقتی که میخواید کلا پروژتون Single Page Application یا به طور مخفف SPA باشه، نه برای کار کوچیکی که فقط استایل چندتا فیلد رو باید تغییر بده.

2 Likes

حالا درباره طراحی که کردی نمیدونم ولی من یک برداشت متفاوتی کردم از سوالت:
الان مشکل سمت فرانت نیست، سمت بک‌اند و ذخیره سازیش هست؟
خب پس یعنی فیلد هایی که میخوای سابمیت کنی بصورت پویا هست(یا حداقل یک سری‌اش)؟

دقیقاً درمورد غالب جنگو کارهایی که دیدم صادقه! یک دلیل دیگه‌ای که علاقه ندارم به جنگو.

1 Likes

فقط جنگو نیست! هر فریمورکی همینه. هرچقدر هم اون فریمورک به اصطلاح «کاملتر» باشه و چیزای بیشتری رو پوشش داده باشه، وضعیت بدتر میشه.
رسما شما نباید «برنامه‌نویس» باشید. باید «جنگو‌کار» باشید تا بتونید با جنگو، کار کنید.

2 Likes

درود
متوجه منظورتون شدم اما برای اینکه منظور خودم را کامل تر برسونم اینطوری مطرح می‌کنم. این دقیقا ساز و کار یک رزومه ساز را داره. شما در رزومه ساز نمیدونید کاربر تا به جال چند سابقه شغلی داره پس فکر نکنم بشه display=none قرار داد.
نمونه کد یا مقاله از پیاده سازی چنین پروژه ای می‌شناسید که بتونید معرفی کنید؟

درود
مدت زیادی نیست که جنگو را شروع کردم. اول با دوره های آموزشی مختلف و بعد با خواندن مستندات جنگو و مقاله های Medium و … شروع کردم اما سوالی که اینجا مطرح کردم را راستش در هیچکدام از آموزش ها یا مقاله ها خودم نتونستم پیدا کنم و برای خودم هم سوال شده بود که چطور باید پیاده بشه.

نه. برای هر چیزی که میگن با گوگل stackoverflow میشه یاد گرفت رفت جلو این هست. توی فلسفه اش این هست explicit over implicit یعنی آقایی که پریروز با پایتون کار میکردی دیروز با pandas امروز بیا وب بنویس مشکلی نیست همه چی explicit هست. ولی توی convention over configuration نمیتونی با گوگل و stackoverflow این کار رو کنی.

خیر!
من اگه بخوام اینو پیاده کنم، فرمها رو توی front-end داخل یه div که میدونم چی هست (id مشخص داره) اضافه میکنم (مثلا با append)
بعد که خواستم submit کنم، میرم children اون div رو یکی یکی میگیرم و json میسازم و میفرستم به back-end
نکته اینه که واقعا نباید از تگ form استفاده کنید. صرفا input و text-box و… بذارید و با js، ارسال دیتا رو هندل کنید.

توی بک-اند هم اگه از یه دیتابیس relational مثل mysql استفاده میکنید، باید یه جدول مثلا users داشته باشید که یه سری مشخصات کلی توش باشه مثل email و password
و یه جدول برای نگه‌داری formی که پر کرده. به این صورت که مثلا توی اون جدول ستونهای job-title، year، job-description و… باشه. بعد از طریق یه userid وصل باشه به جدول users

اینطوری شما میتونید توی جدول users اطلاعاتی که فقط یک ورژن ازشون وجود داره رو بنویسید. مثل همون یوزرنیم.
و توی جدول دوم به هر تعدادی که بخواید، اطلاعات شغلی طرف رو قرار بدید (یعنی مثلا اگه ۵ جا کار کرده، توی ۵ ردیف از اون جدول بنویسید)
موقع خوندن اطلاعاتش هم با join میتونید دیتای این دوتا جدول رو با هم ادغام کنید.

احتمالا از sqlalchemy یا همچین چیزی (یه ORM) استفاده میکنید برای کوئری زدن. تا جایی که یادم میاد نمیشد این مدل کوئریهای پیچیده رو توش پیاده کرد. باید خودتون کوئری بنویسید.

1 Likes

اول از هر چیزی سپاس بابت زمان و راهنمایی
دیتابیس من mysql هست و اتفاقا خودم هم تنها ایده ای که داشتم دریافت اطلاعات در حالت json بود اما نمی‌دونستم آیا این راه درست و بهینه ای هست یا خیر.
من در زمینه Front-End اصلا تجربه ای ندارم و الان دارم با مستندات jQuery فرم را می‌نویسم و تا جایی که میدونم چنین فرمی را با Vue.js هم میشه نوشت. بنظر شما با همان jQuery پیش برم یا Vue.js(با توجه به اینکه فرم در آینده تغییر ممیکنه و فیلد های اضافه/حذف میشند)؟

فکر میکنم بیشتر به این برمیگرده که قراره پروژه به کدوم سمت بره.
اگه فقط همین یه دونه صفحه هست، با jquery میشه پیادش کرد. چون به نظرم React و Vue یه کم سنگین هستن و فقط وقتی میصرفه که قراره کل پروژه رو ببریم به یه level دیگه.
اصولا کسی نمیاد فقط یه تیکه از یه صفحه رو با react پیاده کنه بقیش معمولی باشه. کل وبسایت رو SPA میکنه.

این یه نمونه react هست که dynamic form پیاده کرده.

درسته. داخل پروژه فقط همین یک صفحه هست که نیاز به چنین کار هایی داره که با همان JQuery توسعه میدم.
سپاس

باز هم نگاه کنید اگه با jquery سخت میشه، میتونید با react یا vue درستش کنید و فقط توی همین صفحه از این تکنولوژیها استفاده کنید.
الآن اینطوری نمیتونم نظر بدم واقعا باید تست کنید ببینید با کدوم روش راحتتر پیاده میشه. اگه مثلا jquery سختش میکنه، یه کم سنگین شدن یک صفحه، مساله‌ی خاصی نیست.

دقیقا همینکار را میکنم. فعلا پروژه را با JQuery کامل می‌کنم و بعد Vue و React را هم تست می‌کنم و هر کدوم بهتر بود استفاده می‌کنم.

1 Likes

سلام به کاری که میشه کرد مدل های فرمتونو بسازید یکجا و پارمتر هایی که احتمالا انتخاب نمیشن رو null blank true بزارید . بعدش از فرم مدل بسازید .

در فرانت هم حالا هر اطلاعاتی پست کردید در مدل ذخیره کنید . برای نمایش هم بعدن فیلتر انجام میدین . فکر میکنم این جواب بده

درود
برخی فیلد ها را خود کاربر به تعداد دلخواه میتونه اضافه کنه برای مثال هر یک از جاهایی که کار کرده. دقیقا مثل یک سیستم رزومه ساز که عملا نمی‌دونیم کاربر چه تعداد فیلد اضافه می‌کنه.

خوب کاربر قراره موارد مربوط به رزومه رو ارسال کنه . من با سیستم های رزومه ساز قبلا کار کردم و اکثرا همین منطق اجرا شدن . کلی فیلد و ساب فیلد دارن . نسبت به فرمی که فرم میکنن در مدلش ذخیره میشه . برای نمایش هم از چند تا if o else میتونی استفاده کنی و جوری که نیازه نمایش پیدا کنه . دوست داشتی اطلاعات بیشتری بزار که چک کنیم

جالبه فکر نمی‌کردم از این روش استفاده کنند. یعنی در کل مثلا فرض میگیردند که نهایتا کاربر ۲۰ فیلد برای سابقه کاری بخواد پر بکنه و بعد اون هایی که پر کرده را پردازش میکنند؟

همون ایده کالکشن کردن رو در نظر بگیر. مثلا بصورت JSON ذخیره اش کن توی یک فیلد (قبلش serial کردیش).
یک راه دیگه‌اش اینه که کلا جدولت را پویا تعریف کنی یعنی برای هر فیلد یک رکورد وارد کنی(یک جدول مثلا به اسم فیلد). ولی فکر کنم برای کار شما همون روش اول بهتر باشه.

1 Likes