あなたのコードに次のように試してみてください:このフォームのための私のviews.py
class PublicTicketForm():
queue = forms.ChoiceField(
widget=forms.RadioSelect(),
label=_('What do you need help with?'),
required=True,
choices=()
)
form = PublicTicketForm(initial=initial_data)
form.fields['queue'].choices = [('', 'Other')] + [
((int(q.id)+1), q.title) for q in Queue.objects.filter(allow_public_submission=True)]
注:私はあなたが望んでいたと仮定しでの一定の変化(1増分) <input>
タグのvalue
属性です。例えば
:
queue = forms.ChoiceField(
widget=forms.RadioSelect(),
label=_('What do you need help with?'),
required=True,
choices=()
)
属性choices
は、単純なタプルをとるような構造:コードスニペットに:
<input id="id_queue_3" name="queue" value="2" type="radio">
<input id="id_queue_4" name="queue" value="3" type="radio">
は
<input id="id_queue_3" name="queue" value="3" type="radio">
<input id="id_queue_4" name="queue" value="4" type="radio">
はこれを詳述すると次のようになります。
(('I_become_the_value_1' , 'I_appear_on_browser_screen_1'),
('I_become_the_value_2' , 'I_appear_on_browser_screen_2'),
#and so on...
)
あなたはタプルの最初の指標として(q.idがモデルのPK値である)PKを供給しているときに、PK値は、実際に<input>
タグにvalue
属性になります。
注:あなたは常にジャンゴでChoiceFieldの骨格構造中に<input>
タグでこのvalue
属性ことを知っている必要があります。ユーザーが選択した値のマッピングに役立ちます。
最後にです。ユーザーが選択した正確な値が、クロスチェックによってフォームが送信されたときに正しく取得されていることを確認してください。そこにも微調整が必要な場合があります。 ブラウザでユーザーが選択した選択肢が、ビュー内で正しく受信されない可能性があります。(PK値が混ざってしまうかもしれません)
EDIT:尋ねたよう、私もPKで増分を使用することは非常に良い解決策ではないと感じています。これを避けるには、プライマリキーフィールドをUUIDFieldに宣言します。それについて読むhere. 属性の大きい文字列(一意)を<input>
タグにすることができます。それが好きで使用してください:
あなたのmodels.py内部:
class Queue(models.Model):
#all your fields.
alternative_unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
#Rest of the code.
今、あなたは、同じ方法でそれを照会したが、タプルの最初の指標としてalternative_unique_fieldを追加することができます。
あなたのviews.pyで form = PublicTicketForm(initial=initial_data)
form.fields['queue'].choices = [('', 'Other')] + [
(q.alternative_unique_id, q.title) for q in Queue.objects.filter(allow_public_submission=True)]
また、あなたにも主キーとしてこのalternative_unique_idを宣言することができます。 これはデータベースのスペースを節約します。
UUIDFieldを使用する代わりに、を使用すると、primary_key=True
をフィールド内に設定するだけで独自のプライマリキーフィールドを作成できます。
name = models.CharField(primary_key = True , max_length = 64)
をしかしが、常に一意であると<input>
タグのvalue
属性内の適切な値を得るためにあなたのform.fields['queue'].choices
にいくつかのロジックを変更するために起こっていることを確認してください:あなたは好きでそれを行うことができます。
希望すると、これが役立ちます。ありがとう。
この入力タグのHTMLのvalue属性にどのような値(2ではなく)を指定しますか: "" ? –
リスト3にあるので、3としましょう。 – Di437
投稿した回答を確認してください。それが役立つかどうかを見てください。 –