كيف يمكنني جعل عنصر قائمة جانغو ModelForm تحديدها بشكل افتراضي؟

StackOverflow https://stackoverflow.com/questions/624265

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا أعمل على التطبيق جانغو. واحد من النماذج بلدي، "المستخدم"، ويشمل حقل "نوع الجنس"، كما هو موضح أدناه:

GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True)

وأنا باستخدام ModelForm لتوليد "مستخدم جديد" شكل HTML. يبدو لي جوجل فو أن الفشل لي - كيف يمكنني جعل هذا النموذج HTML يكون بند "ذكر" محددا بشكل افتراضي في مربع القائمة المنسدلة؟ (أي حتى selected="selected" لهذا البند.)

هل كانت مفيدة؟

المحلول

إذا كنت في حاجة الى نموذج فارغ مع قيمة افتراضية محددة، ثم تمرير القاموس "الأولي" إلى منشئ شكل النموذج الخاص بك باستخدام اسم المجال الخاص بك كمفتاح:

form = MyModelForm (initial={'gender':'M'})

و-أو -

ويمكنك تجاوز سمات معينة لModelForm باستخدام طبيعة التعريفي للAPI نماذج. ومع ذلك، وربما هذا هو مرهقة قليلا عن هذه الحالة استخدام وأذكر أنه فقط لتظهر لك ان كنت تستطيع ان تفعل ذلك. قد تجد استخدامات أخرى لهذا في المستقبل.

class MyModelForm (forms.ModelForm):
    gender = forms.ChoiceField (choices=..., initial='M', ...)
    class Meta:
        model=MyModel

و-أو -

إذا كنت ترغب في ModelForm المنضم إلى حالة معينة من النموذج الخاص بك، يمكنك تمرير "المثال" من النموذج الخاص بك والذي يسبب جانغو لسحب القيمة المحددة من هذا النموذج.

form = MyModelForm (instance=someinst)

نصائح أخرى

وبالتأكيد default سوف تفعل خدعة؟

ومنها مثلا.

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top