Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django电子商务建议_Python_Django - Fatal编程技术网

Python Django电子商务建议

Python Django电子商务建议,python,django,Python,Django,我正在读Jim McGaw写的《开始Django电子商务》,我正在尝试添加一项功能,允许客户在购买智能手机时选择是否使用存储卡。这就是我所做的: 我为存储卡创建了一个模型 我将此添加到我的“添加到购物车”表单中 mem_8 = MemoryCard.objects.get(name='eight') mem_16 = MemoryCard.objects.get(name='sixteen') mem_32 = MemoryCard.objects.get(name='

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

  • 我为存储卡创建了一个模型
  • 我将此添加到我的“添加到购物车”表单中

    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为null,不能为null


    我的问题是我是否继续我开始的工作(如果是的话,任何关于错误的建议都会很好),或者有更简单、更容易的方法来完成它?

    不,这不是它的工作方式。不能将模型对象用作select小部件中的ID属性。而且您绝对不应该在表单声明中执行
    get
    s

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

    memory_card = forms.ModelChoiceField(queryset=MemoryCard.objects.all())
    
    如果您有更多不想在此处显示的存储卡选项,可以缩小范围:

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

    这根本不是一个关于电子商务的问题,请选择一个更好的标题。你能解释一下为什么在表单声明中执行“get”不是一个好主意吗?这不是queryset=MemoryCard.objects.all()进入表单吗?不,因为
    get
    不是懒惰的,而是
    all
    (和
    过滤器
    )都是懒惰的。因此get将在导入时执行,而不是在实际使用表单时执行。最后一件事!如果用户选择不使用存储卡,但购物车项目模型需要使用存储卡,那么我是否应该创建另一个价格为0.00的模型对象?@DanielRoseman我正在考虑将Django用于定制电子商务网站。你认为这是一个好的选择还是我应该考虑其他的选择,比如Magento?