2012-03-21 6 views
0

djangoでは、インラインフォームではなくフォームセットレベルでChoiceFieldを使用できますか?たとえば、電話機用のフォームセットがあり、各インラインフォームが単一のPhoneモデルを表している場合、どのようにしてすべてのインラインフォームにまたがるChoiceFieldを作成できますか?私のモデルDjango - ChoiceField複数のフォームにまたがる

Complex ChoiceField

::私は、プライマリ電話を選択していますこのような何か

class Profile(models.Model): 
    verified = models.BooleanField(default=False) 
    primary_phone = models.OneToOneField('Phone', related_name='is_primary', null=True, blank=True) 

class Phone(models.Model): 
    profile = models.ForeignKey(Profile, editable=False) 
    type = models.CharField(choices=PHONE_TYPES, max_length=16) 
    number = models.CharField(max_length=32) 

    @property 
    def is_primary(self): 
     return profile.primary_phone == self 

私はいつもprimary_phoneを削除し、それが主だかいないかを示すためにPhoneでのBooleanFieldを使用することができ、これが私の問題に役立つかどうかはわかりません。

可能であれば、よりハッキリではありませんもっとジャンゴ様のアプローチを探しています。

答えて

1

これを自動的に作成する方法はありません。あなたのModelForm(インラインで使用されています)では、is_primaryというブール値のフィールドを追加します。このフィールドは、各インラインPhoneインスタンス(チェックボックス)に表示されます。

フロントエンドでは、ユーザーが一度に1つのデフォルトを選択できるように、javascriptで並べ替えます。バックエンドでは、いくつかのカスタム検証を使用して、is_defaultが1つだけ提出されたことを再確認し、必要に応じてフォームロジックでprimary_phoneを更新します。

+0

私はこのアプローチに先立って言われましたが、私はまだそれの1つの側面を得ていません。ラジオボタンではなく、javascriptでチェックボックスを使用する理由は何ですか?私は同じマニュアル作業を行うことができますが、ラジオボタンとjavascriptを使用することはできません。チェックボックスを好む特別な理由は何ですか? – abstractpaper

+0

ブール値フィールドはデフォルトでチェックボックスを生成しますが、複数のモデルにまたがるラジオボタングループを生成するためにdjangoを取得する方法を考えることはできません。 djangoはそれぞれの名前にプレフィックスを付けるので、可能性は非常に低いと思います。 Peronally私はチェックボックスを使用して、ラジオボタンのように動作させるためにjavascriptを使用しても問題はありません。 – John

関連する問題