【问题标题】:Remove option from generic class view in Django从 Django 的通用类视图中删除选项
【发布时间】:2019-06-29 00:04:52
【问题描述】:

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

【问题讨论】:

    标签: django python-3.x django-views


    【解决方案1】:

    覆盖CreateViewget_form 方法并更改该字段的查询集,如下所示:

    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
    

    【讨论】:

    • IDE 说我需要不同的参数 - get_form(self, *args, **kwargs) - 但除此之外效果很好,非常感谢!
    猜你喜欢
    • 2013-03-08
    • 2013-06-17
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2011-08-21
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多