2017-07-12 7 views
0
私は選択肢私は別のモデルに新しいインスタンスを作成するたびに、追加の形で選択フィールドを作りたい

を使ってDjangoの中で選択フィールドを記入します。スケジュールフォームのインストラクターの選択フィールド内の各選択肢は常にFIRST_NAMEになるように、私はそれをしたいは、他のモデル

class Instructor(models.Model): 
    first_name = models.CharField(max_length=128) 
    last_name = models.CharField(max_length=128) 

class Schedules(models.Model): 
    instructor = models.CharField(max_length=128) 

forms.py

class ScheduleForm(forms.ModelForm): 
    instructor = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control'})) 

models.py:ここに関連するコードです+ '' + last_nameを指定し、新しいInstructorインスタンスが作成されるたびに選択肢を追加します。私はModelChoiceFieldを使うのは良い考えだと聞きましたが、私はインスタンスの一部だけを必要としています。 populationまたはsqlite3操作を使用する必要がありますか?ありがとう。

答えて

0

あなたはそれを達成するために、通常のDjangoのフォームでModelChoiceFieldを使用することができます。オプション文字列をカスタマイズしたいので、ModelChoiceFieldをサブクラス化する必要があります。

from django import forms 
from django.forms import ModelChoiceField 
from yourapp.models import Instructor 


class InstructorChoiceField(ModelChoiceField): 
    """Retun first_name + last_name as option string """ 

    def label_from_instance(self, obj): 
     return "{0} {1}".format(obj.first_name,obj.last_name) 


class ScheduleForm(forms.Form): 
    instructor = InstructorChoiceField(queryset = Instructor.objects.all()) 
0

私は右だ場合、あなたはインストラクターモデルからScheduleFormであなたのインストラクターのフィールドを移入します。 あなたが行うことができるのは、InstructorモデルへのSchedulesモデル参照にForeignKeyを追加し、スケジュールモデルを使用してフォームを作成することです。 models.py

class Instructor(models.Model): 
    first_name = models.CharField(max_length=128) 
    last_name = models.CharField(max_length=128) 

    def __str__(self): 
     return "%s %s" %(self.first_name, self.last_name) 

class Schedules(models.Model): 
    instructor = models.ForeignKey(Instructor) 

、今することができますcreate your form using model

form.py

from django.forms import ModelForm 
from myapp.models import Schedules 

#Create the form class. 
class ScheduleForm(ModelForm): 
    class Meta: 
     model = Schedules 
関連する問題