MySQL / SQLite3

时间:2011-04-16 08:56:50

标签: mysql django sqlite

我偶然发现了以下内容:

def save_formset(self, request, form, formset, change):
    instances = formset.save(commit=False)
    bargain_id = 0
    total_price = Decimal(0)
    for instance in instances:
        if isinstance(instance, BargainProduct):
            total_price += instance.quantity * instance.product.price
            bargain_id = instance.id
        instance.save()
    updateTotal = Bargain.objects.get(id=bargain_id)
    updateTotal.total_price = total_price - updateTotal.discount_price
    updateTotal.save()

这个代码在我的本地MySQL设置上对我有用,但是,在我的SQLite3 *上运行的实时测试环境中,我得到“交易匹配查询不存在”。误差..

我认为这是由于在SQLite上保存实例的不同层次结构..但是它们似乎运行(并且应该)行为相同......?

*我无法在我的liveserver atm上使用python支持重新编译MySQL,这样就不行了

4 个答案:

答案 0 :(得分:0)

查看代码,如果没有来自formset.save()的实例,bargain_id将在0到达Bargain.objects.get(id = bargain_id)行时为0,因为它会跳过for循环。如果它是0,我猜它会因你看到的错误而失败。

您可能需要检查在formset.save()期间是否在数据库中正确存储这些值,并将某些内容返回给实例。

答案 1 :(得分:0)

这一行给出错误:

updateTotal = Bargain.objects.get(id=bargain_id)

最可能是因为这一行:

instances = formset.save(commit=False)

您是否为formset定义了save()方法?因为它没有看到有一个内置。您可以通过访问formset.cleaned_data返回django docs所说的来保存它。

编辑:我自己更正了,它实际上有一个基于此page的save()方法。

答案 2 :(得分:0)

我一直在看同样的问题。它将数据保存到数据库,并填充表单集。问题是instances = formset.save(commit=False)上的保存不会返回值。当我查看内置的保存方法时,它应该返回保存的数据。

另一个奇怪的事情是,它似乎对我的朋友MySQL后端起作用,但不适用于他的SQLITE3后端。在它旁边它不适用于我的MySQL后端。

答案 3 :(得分:0)

本地循环返回这些打印输出(在MySQL上)..在sqlite3上它失败并且查询没有激活

('Formset: ', <django.forms.formsets.BargainProductFormFormSet object at 0x101fe3790>)
('Instances: ', [<BargainProduct: BargainProduct object>])
[18/Apr/2011 14:46:20] "POST /admin/shop/deal/add/ HTTP/1.1" 302 0