带有Foreignkey限制选项的Django CreatView

时间:2018-04-26 10:59:24

标签: sql django backend

在我的模特中我有

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

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

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

1 个答案:

答案 0 :(得分:2)

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

<强> forms.py

LAlt & *::Suspend, On
LShift::LButton
LAlt::RButton

<强> views.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)