【问题标题】:Django CreatView with Foreignkey limit optionsDjango 使用外键限制选项创建视图
【发布时间】:2018-10-07 01:14:40
【问题描述】:

在我的模型中我有

Person:
    name
Sneaker:
    owner(FK) = Person.id
    size
    colour
Booking:
    customer(FK) = Person.id
    sneaker(FK) = Sneaker.id
    time
    price

逻辑是在一个人登录后,他可以开始为他的运动鞋预订服务。我将客户设置为 request.user 没有问题。但不知何故,在创建预订视图时,可以看到数据库中的所有运动鞋记录(包括他和其他客户的),但我希望客户只能选择自己的运动鞋。我可以限制这个吗?我的创建视图如下所示。谢谢!

class Booking_Create_View(CreateView):
    fields = ['sneaker','time','price']
    model = Booking
    def form_valid(self, form):
        form.instance.customer = self.request.user
        return super(Booking_Create_View, self).form_valid(form)
    success_url = reverse_lazy("booking_system:index")

【问题讨论】:

标签: sql django backend


【解决方案1】:

您将需要创建一个自定义 BookingCreateForm 接受用户 kwarg 并过滤查询集:

forms.py

class BookingCreateForm(forms.ModelForm):
    class Meta:
        model = Booking
        fields = ['sneaker', 'time', 'price']

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super().__init__(*args, **kwargs)
        self.fields['sneaker'].queryset = Sneaker.objects.filter(owner=user)

views.py

class Booking_Create_View(CreateView):
    form_class = BookingCreateForm

    def form_valid(self, form):
        form.instance.customer = self.request.user
        return super().form_valid(form)

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

    success_url = reverse_lazy("booking_system:index")

【讨论】:

  • 帮助很大!谢谢
猜你喜欢
  • 2015-07-04
  • 2015-01-04
  • 1970-01-01
  • 2018-11-07
  • 2016-11-01
  • 2023-04-08
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
相关资源
最近更新 更多