Django电子商务广告

2024-05-29 10:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读Jim McGaw的《开始Django电子商务》,我正在尝试添加一个功能,允许客户在购买智能手机时选择是否带存储卡。我就是这么做的:

  1. 我为记忆卡制作了一个模型
  2. 我将此添加到我的“添加到购物车”窗体中

    mem_8 = MemoryCard.objects.get(name='eight')         
    mem_16 = MemoryCard.objects.get(name='sixteen')    
    mem_32 = MemoryCard.objects.get(name='thirtytwo')
    choices = (
        ('without', 'Without Memory Card'),
        (mem_8, '8GB + 20$'),
        (mem_16, '16GB + 25$'),
        (mem_32, '32GB + 30$')
        )
    
     memory_card = forms.CharField(widget=forms.Select(choices=choices, attrs = {'class':'choices'}))
    

在这一点上,我得到了一个完整性错误,它说内存卡id为空,不能为空

我的问题是我是否继续我开始的(如果是这样的话,任何关于错误的建议都会很好)或者有更简单和容易的方法来做它?你知道吗


Tags: djangoname功能get客户objects错误forms
1条回答
网友
1楼 · 发布于 2024-05-29 10:48:56

不,不是这样的。不能将模型对象用作select小部件中的ID属性。而且您绝对不应该在表单声明中执行get。你知道吗

相反,您应该使用ModelChoiceField,queryset指向MemoryCard模型:

memory_card = forms.ModelChoiceField(queryset=MemoryCard.objects.all())

如果您有更多不想在此处显示的存储卡选项,可以缩小范围:

memory_card = forms.ModelChoiceField(queryset=MemoryCard.objects.filter(name__in=['eight', 'sixteen', 'thirtytwo'])

相关问题 更多 >

    热门问题