今週Djangoの学習を始めたばかりで、クラスベースのビューでレンダリングされている選択メニューからオプションを削除する方法を見つけようとしています。ドロップダウンは、ユーザーテーブルにリンクする外部キーフィールド用です。
ここでの機能は、ログインしている現在のユーザーがそのリストに表示されないようにすることです(基本的に、誰かが自分で選択できるようにしたくない)。どうすればこれを行うことができますか?
見る:
class TransferCreateView(CreateView):
model = Transfer
template_name = 'points/transfer_form.html'
fields = ['receiver', 'message', 'amount']
モデル:
class Transfer(models.Model):
receiver = models.ForeignKey(User, null=False,
on_delete=models.CASCADE, related_name='receiver')
sender = models.ForeignKey(User, null=False, on_delete=models.CASCADE, related_name='sender')
amount = models.IntegerField(
validators=[
MinValueValidator(1),
MaxValueValidator(1000)],
null=False)
message = models.CharField(max_length=100)
date_sent = models.DateTimeField(default=timezone.now)
基本的に、送信者(form_valid()関数のコードで設定する予定)である人が、レンダリング時にテンプレートの「受信者」のオプションになることは望ましくありません。
のget_form
メソッドをオーバーライドし、CreateView
そのフィールドのクエリセットを次のように変更します。
class TransferCreateView(CreateView):
model = Transfer
template_name = 'points/transfer_form.html'
fields = ['receiver', 'message', 'amount']
def get_form(self, form_class):
form = super().get_form(form_class)
form.fields['receiver'].queryset = User.objects.exclude(id=self.request.user.id)
return form
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加