Django电子商务建议

时间:2014-08-14 11:47:49

标签: python django

我正在阅读'开始Django电子商务'由Jim McGaw和我试图添加一项功能,允许购买智能手机的客户选择或不使用存储卡。这就是我所做的:

  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'}))
    
  3. 此时我收到一个Integrity错误,指出memory_card_id为null且不能为null

    我的问题是,我是否继续我的开始(如果有任何关于错误的建议会很好)或者有更简单易行的方法吗?

1 个答案:

答案 0 :(得分:1)

不,那不是它的工作方式。您不能将模型对象用作选择小部件中的ID属性。你绝对不应该在表格声明中做get

相反,你应该使用ModelChoiceField,查询集指向MemoryCard模型:

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

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

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