私は2つのモデルを持っています:
class Account1(models.Model):
uuid = models.CharField(max_length=22, unique=True)
user = models.ForeignKey(User)
class Account2(models.Model):
uuid = models.CharField(max_length=22, unique=True)
account_1 = models.ForeignKey(Account1)
「uuid」は、短い uuid (「mfAiC」など) をフォームのインデックスとして格納するカスタム CharField です。URL は /view/uuid/ のようになります。すべての URL/HTML で実際の ID を非表示にしたいと考えています。
モデル Account2 のフォーム:
class Account2Form(forms.ModelForm):
class Meta:
model = Account2
fields = (
'account_1',
)
def __init__(self, user, *args, **kwargs):
super(Account2Form, self).__init__(*args, **kwargs)
self.fields['account_1'].queryset = Account1.objects.filter(user=user)
レンダリングされる HTML は次のようになります。
<select name="account_1" id="id_account_1">
<option value="" selected="selected">---------</option>
<option value="1">account 1 name</option>
</select>
私が必要とするのは、次のようなフォームで id の代わりに uuid を使用することです:
<select name="account_1" id="id_account_1">
<option value="" selected="selected">---------</option>
<option value="mfAiC">account 1 name</option>
</select>
私は手動でそれを行うことができることを知っています。account_1 を無効にして、uuid などのフォーム フィールドを作成し、動的に選択肢を設定できます。次に、フォーム検証またはビューでフォーム データを検証します。
しかし、他の解決策はありますか?