具有外键限制选项的 Django CreatView

Django CreatView with Foreignkey limit options

在我的模型中我有

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

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

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")

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

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")