1

我这周刚开始学习 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() 函数的代码中设置)在呈现时成为模板中“接收者”的选项。

4

1 回答 1

2

覆盖 的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
于 2019-06-29T00:31:06.510 回答