Django将URL参数转换为form_valid

时间:2018-08-28 12:28:24

标签: django django-forms

我的网址格式为:

path('makeoffer/<listing_id>', OfferCreateView.as_view(), name="CreateOfferview"),

此视图是带有两个参数的表单。 Listing_id需要保存为Offer对象的一部分,并且不能由用户编辑。我本质上是想这样做:

def form_valid(self, form):

    form.instance.user = self.request.user
    form.instance.datetime = dt.now()
    form.instance.listing_id = listing_id #(from the url)

如何从form_valid函数内部访问参数?我已经尝试过get_context_data,但是我唯一能看到的方法是将get_context_data传递给视图,然后再将视图传递回表单,这似乎有些怪诞。

1 个答案:

答案 0 :(得分:0)

将表单类的 __init__() 方法覆盖为

class SampleForm(forms.Form):

    def __init__(self, *args, **kwargs):
        self.listing_id = kwargs.pop('listing_id', None)
        super().__init__(*args, **kwargs)

    def form_valid(self, form):
         # you could access the variable by "self.listing_id"
            .....
         my_list_id = self.listing_id
         # your code ....

在您看来

def myview(request,listing_id):
    form = SampleForm(listing_id=listing_id)
    ....