使用不在模型中的字段扩展 django 表单,导致错误,只能连接列表,而不是元组
Posted
技术标签:
【中文标题】使用不在模型中的字段扩展 django 表单,导致错误,只能连接列表,而不是元组【英文标题】:Extending django form with fields not in model, results in error that only lists can be concatenated, not tuples 【发布时间】:2019-08-02 01:41:22 【问题描述】:我正在完成一个电子商务应用程序,最后阶段是实施订单并使用条带处理付款。
我想向用户展示一个表单,他们可以在其中输入客户详细信息以及卡详细信息(卡号、到期日期和 cvv),这些信息将发送到 Stripe,但不会存储在本地。因此,在我用于表单的模型中没有与存储卡号相关的字段。
在寻找我的问题的答案时,我来到across这个问题和答案,这似乎是解决方案。
但是,当我尝试以相同的方式扩展我的表单时,我得到一个错误:
fields = OrderForm.Meta.fields + ('card_num', 'exp_month', 'exp_year', 'cvc')
TypeError: can only concatenate list (not "tuple") to list
据我所知,我正在做与该问题的答案中提出的完全相同的事情,所以我不确定为什么会收到此错误。
我正在扩展的 forms.py:
class OrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ['first_name', 'last_name', 'email',
'address', 'zipcode', 'city', 'state']
我尝试在我的 views.py 中扩展表单:
class OrderPayForm(OrderForm):
card_num = forms.CharField(max_length=16)
exp_month = forms.CharField(max_length=2)
exp_year = forms.CharField(max_length=4)
cvc = forms.CharField(max_length=3)
class Meta(OrderForm.Meta):
fields = OrderForm.Meta.fields + ('card_num', 'exp_month', 'exp_year', 'cvc')
在我正在做的事情与我正在遵循的已接受答案中的内容不同的地方,我是否遗漏了什么?
【问题讨论】:
【参考方案1】:该错误准确地告诉您出了什么问题。使用列表而不是元组:
fields = OrderForm.Meta.fields + ['card_num', 'exp_month', 'exp_year', 'cvc']
【讨论】:
天哪……事后看来如此明显。在决定发布之前,我查看了很多次,但我看不到它。好的,谢谢! 我实际上更愿意删除这个问题,因为我认为它不会为网站增加价值,但你必须删除你的答案才能这样做。如果您同意,请告诉我,否则,谢谢您的回答。 我不熟悉这类事情的网站政策。您能否向我指出一些文档,以澄清何时应该或不应该删除问题? 这取决于你是否愿意,AFAIK 对这类事情没有既定的政策。以上是关于使用不在模型中的字段扩展 django 表单,导致错误,只能连接列表,而不是元组的主要内容,如果未能解决你的问题,请参考以下文章
将不在模型中的字段添加到 Django REST 框架中的序列化程序