জ্যাঙ্গো ফর্মগুলিতে নির্বাচিত মান সেট করা হচ্ছে h চয়েসফিল্ড


106

এখানে একটি ফর্মের ক্ষেত্রের ঘোষণা:

max_number = forms.ChoiceField(widget = forms.Select(), 
    choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)

আমি প্রাথমিক মানটি সেট করতে চাই 3এবং এটি কাজ করবে বলে মনে হয় না। আমি পরম, উক্তি / কোন উদ্ধৃতি, ইত্যাদি নিয়ে খেলেছি ... তবে কোনও পরিবর্তন হয়নি।

এটা সম্ভব হলে কেউ আমাকে একটি নির্দিষ্ট উত্তর দিতে পারে? এবং / অথবা আমার কোড স্নিপেটে প্রয়োজনীয় টুইঙ্ক?

আমি জ্যাঙ্গো 1.0 ব্যবহার করছি


আমি একই জিনিস ভাবছি। "প্রাথমিক" সর্বশেষ ট্রাঙ্ক সংস্করণেও পছন্দগুলির সাথে কাজ করতে শেইম করে না।
টাই

উত্তর:


114

আপনি যখন ফর্মটি ইনস্ট্যান্ট করবেন তখন প্রাথমিক মানটি সেট করার চেষ্টা করুন:

form = MyForm(initial={'max_number': '3'})

3
হয় '3'tuple বা দ্বিতীয় প্রথম মান সংশ্লিষ্ট?
বেস্টস্টটং

4
টিউপসগুলি বিকল্পগুলির জন্য জোড়া (মান, লেবেল) যুক্ত করে এবং আপনি প্রাথমিক মানটি নির্দিষ্ট করতে চান - সুতরাং '3' প্রথম আইটেমটিকে বোঝায়।
টম

95

এটি হাতের তাত্ক্ষণিক প্রশ্নের উপর স্পর্শ করে না, তবে এই প্রশ্ন / এটি নির্বাচিত মানটিকে একটিকে নির্ধারিত করার চেষ্টা সম্পর্কিত অনুসন্ধানগুলির জন্য আসে ChoiceField

আপনি যদি ইতিমধ্যে super().__init__আপনার ফর্ম শ্রেণিতে কল করেছেন তবে আপনার অভিধানটি আপডেট করা উচিত form.initial, field.initialসম্পত্তিটি নয়। আপনি যদি অধ্যয়ন করেন form.initial(যেমন print self.initialকল করার পরে super().__init__), এতে সমস্ত ক্ষেত্রে মান থাকবে । Noneসেই ডিকের একটি মান থাকা field.initialমানকে ওভাররাইড করে ।

যেমন

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        # assign a (computed, I assume) default value to the choice field
        self.initial['choices_field_name'] = 'default value'
        # you should NOT do this:
        self.fields['choices_field_name'].initial = 'default value'

3
যদি আপনি এই উত্তরটি বুঝতে না পারেন তবে এই
জ্যাঙ্গো

1
আমি নিশ্চিত না যে এটি কিনা কারণ কারণ এই উত্তরটি এত পুরানো যে এটি আর কাজ করে না, তবে আমি এই সমাধানটি কাজ করতে অক্ষম। আমি উপরের প্রতিটি সংমিশ্রণ চেষ্টা করেছি এবং এখনও আমি কোনও ভালবাসা পাই না। আমি আবার এই প্রশ্নটি এখানে জিজ্ঞাসা করেছি: stackoverflow.com/questions/52191096/… উত্তরটি এখনও যদি একই থাকে তবে দয়া করে আমাকে আমার কোডটিতে কী ভুল আছে তা জানান। ধন্যবাদ!
লেহরিয়ান

48

আপনি নিম্নলিখিতগুলিও করতে পারেন। আপনার ফর্ম শ্রেণি ডিএফ এ:

max_number = forms.ChoiceField(widget = forms.Select(), 
                 choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)

তারপরে আপনার দৃষ্টিতে ফর্মটি কল করার সময় আপনি প্রাথমিক পছন্দ এবং পছন্দ উভয় তালিকাই গতিশীলভাবে সেট করতে পারেন।

yourFormInstance = YourFormClass()

yourFormInstance.fields['max_number'].choices = [(1,1),(2,2),(3,3)]
yourFormInstance.fields['max_number'].initial = [1]

দ্রষ্টব্য: প্রাথমিক মানগুলির একটি তালিকা হতে হবে এবং পছন্দগুলি 2-tuples হতে হবে, উপরের আমার উদাহরণে আমার কাছে 2-টিপলগুলির একটি তালিকা রয়েছে। আশাকরি এটা সাহায্য করবে.


5
সম্ভবত লক্ষণীয় যে এর মানটি initialসূচকে নয়, নির্বাচিত হওয়ার জন্য আইটেমের কীটি বোঝায়। এটি চেষ্টা করার জন্য আমাকে কয়েকবার চেষ্টা করেছিল!
বিগলসজেডএক্সএক্স

20

আমি এই সমস্যাটিতেও এসেছি এবং বুঝতে পেরেছি যে সমস্যাটি ব্রাউজারে রয়েছে। আপনি রিফ্রেশ করার সময় ব্রাউজারটি চেক করা ক্ষেত্রটিকে অগ্রাহ্য করে আগের মতো একই মানগুলির সাথে ফর্মটি পুনঃপ্রতিষ্ঠিত করছে। যদি আপনি উত্সটি দেখতে পান তবে আপনি যাচাই করা মানটি সঠিক দেখবেন। অথবা আপনার ব্রাউজারের ইউআরএল ফিল্ডে আপনার কার্সারটি রেখে এন্টার টিপুন। এটি স্ক্র্যাচ থেকে ফর্মটি পুনরায় লোড করবে।


1
শুধু fyi, এফএফ 6 এ এখনও ঘটে। রিফ্রেশ বোতাম টিপতে যথেষ্ট নয়। তবে গুগল ক্রোম রিফ্রেশ বোতামটি যথেষ্ট, অ্যাড্রেস বারে যাওয়ার দরকার নেই
mhd

1
আমি মনে করি এটি ফায়ারফক্সে সর্বদা ঘটবে; এটা উদ্দেশ্যমূলক আচরণ।
থিপার

এখনও ক্রোম 83 এ ঘটে যায়, আপনি আমার জীবন বাঁচিয়েছেন!
ল্যাপিন

7

টম এবং বার্টনের উত্তর উভয়ই শেষ পর্যন্ত আমার জন্য কাজ করে তবে কীভাবে এগুলিতে প্রয়োগ করতে হয় তা নির্ধারণ করতে আমার একটু সমস্যা হয়েছিল ModelChoiceField

এটি শুধুমাত্র কৌতুক যে পছন্দের tuples হিসাবে সংরক্ষিত হয় (<model's ID>, <model's unicode repr>)যাতে আপনি প্রাথমিক মডেল নির্বাচন সেট করতে চান তাহলে, আপনি মডেলের পাস, আইডি প্রাথমিক মান বস্তু নয় নিজেই বা এটি নাম বা অন্য কিছু হিসাবে। তারপরে এটি এতটা সহজ:

form = EmployeeForm(initial={'manager': manager_employee_id})

বিকল্প হিসাবে initialযুক্তিটি অতিরিক্ত রেখার স্থলে এড়ানো যায়:

form.fields['manager'].initial = manager_employee_id

1
আপনার দ্বিতীয় লাইনের কোডটি সেই বিরল ক্ষেত্রে একটিতে নির্দোষভাবে কাজ করে যেখানে আপনাকে একটি GETঅনুরোধের পরে কোনও ফর্মের প্রাথমিক মান সেট করতে হবে এবং একটি ভিউয়ের মধ্যে থেকে সেট করতে হবে।
kstratis

3

ডেভ - কোন ভাগ্য ব্রাউজার সমস্যার সমাধান খুঁজে পাচ্ছে? রিফ্রেশ করার জন্য কি কোনও উপায় আছে?

মূল সমস্যা হিসাবে, ফর্মটি শুরু করার সময় নিম্নলিখিত বিষয়গুলি চেষ্টা করুন:

def __init__(self, *args, **kwargs):
  super(MyForm, self).__init__(*args, **kwargs)   
  self.base_fields['MyChoiceField'].initial = initial_value

1
এটি দেখতে সুন্দর লাগছে না। জ্যাঙ্গো 1.3, forms.py:93 থেকে উদ্ধৃত:Instances should always modify self.fields; they should not modify self.base_fields.
টমাস Tomecek

1

আপনি ফর্মটি কীভাবে উপস্থাপন করছেন তা আমার নিশ্চিত হওয়া দরকার। প্রাথমিক মানটি কেবল আনবাউন্ড ফর্মেই ব্যবহৃত হয়, যদি এটি আবদ্ধ থাকে এবং সেই ক্ষেত্রের জন্য কোনও মান অন্তর্ভুক্ত না করা হয় তবে কিছুই নির্বাচন করা হবে না।


-4

এটি চেষ্টা করুন এটি আমার জন্য কাজ করে, আমি এটি মডেল.পাইতে যুক্ত করেছি

options = (
    ('1','1'),
    ('2','2'),
    ('3','3')
)

max_number = forms.ChoiceField(max_length = 2, choices = options, default ='3')

6
এটি জাঙ্গোতে 1.8.1 এ একটি ত্রুটি দেয়:TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'
জুলিওসার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.