gpt4 book ai didi

django - 如何在 Django 中调用 forms.Select 的 render_option()?

转载 作者:行者123 更新时间:2023-12-01 09:30:49 24 4
gpt4 key购买 nike

class MySelect(forms.Select):
def __init__(self, *args, **kwargs):
self.variations = kwargs.pop('variations')
super(MySelect, self).__init__(*args, **kwargs)

def render_option(self, selected_choices, option_value, option_label):
return '<option whatever> {} </option>'.format(self.variations[0])

class CartItemForm(forms.ModelForm):

class Meta:
model = CartItem
fields = (
'variation',
'width',
'height',
'quantity',
)


def __init__(self, *args, **kwargs):
product = kwargs.pop('product')
try:
cart = kwargs.pop('cart')
self.cart = cart
except:
pass

super().__init__(*args, **kwargs)

variation_field = self.fields['variation']
variation_field.queryset = Variation.objects.filter(
product=product
)
variation_field.widget = MySelect(variations=variation_field.queryset)

def save(self):
cart_item = super().save(commit=False)
cart_item.cart = self.cart
cart_item.save()

return cart_item

但是它没有调用 render_option() 所以它没有在 template 中显示任何东西...

这有什么问题吗?

最佳答案

这个问题有问题。当您自定义一个 Widget 时,您需要覆盖适当的功能。然后框架会在适当的时候为您调用它,但您永远不必显式调用它们。

发生的事情是您遇到了(可能是继承的,就像我的情况一样)一个代码示例,它可以与 Django 的早期版本一起使用。在那些早期版本中,render_option 是正确的函数,但就我而言,我在 Django 1.11 ( https://docs.djangoproject.com/en/2.1/releases/1.11/#changes-due-to-the-introduction-of-template-based-widget-rendering ) 中再也看不到它了。唯一正确的做法是转换样本,找到我们可以覆盖的现有函数以达到预期的结果。

关于django - 如何在 Django 中调用 forms.Select 的 render_option()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39786148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com