DjangoのModelFormでForeignKeyフィールドをSelectタグ(ドロップダウン)として表示する
|
↓このように、ProfileモデルとJobモデルが用意されています。
# models.py
class Job(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
job = models.CharField(max_length=64, blank=True)
class Profile(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
location = models.CharField(max_length=64, blank=True)
favorite_words = models.CharField(max_length=64, blank=True)
job = models.ForeignKey(Job, on_delete=models.SET_NULL, null=True)
JobはProfileのForeignKeyとして多対1の関係にあります。
このモデルを元にModelFormを作ります。
# forms.py
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('location', favorite_words', 'job')
この状態で、templateにフォームを表示させると、下図のようになります。
オブジェクトのキーが表示されてしまいました。
このままだとなんの項目がわからないので、ちゃんと名前が表示されるようにします。
Jobモデルに下記を追加します。
class Job(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
job = models.CharField(max_length=64, blank=True)
def __str__(self):
return self.job
こうするとあら不思議。いい感じになりました。
やったね!