开发者

MySQL / SQLite3

开发者 https://www.devze.com 2023-02-25 01:03 出处:网络
I stumbled upon the following: def save_form开发者_运维问答set(self, request, form, formset, change):

I stumbled upon the following:

def save_form开发者_运维问答set(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()

This code is working for me on my local MySQL setup, however, on my live test enviroment running on SQLite3* I get the "Bargain matching query does not exist." error..

I am figuring this is due to a different hierarchy of saving the instances on SQLite.. however it seems they run(and should) act the same..?

*I cannot recompile MySQL with python support on my liveserver atm so thats a no go


Looking at the code, if you have no instances coming out of the formset.save(), bargain_id will be 0 when it gets down to the Bargain.objects.get(id=bargain_id) line, since it will skip over the for loop. If it is 0, I'm guessing it will fail with the error you are seeing.

You might want to check to see if the values are getting stored correctly in the database during your formset.save() and it is returning something back to instances.


This line is giving the error:

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

which most probably is because of this line:

instances = formset.save(commit=False)

Did you define a save() method for the formset? Because it doesn't seen to have one built-in. You save it by accessing what formset.cleaned_data returns as the django docs say.

edit: I correct myself, it actually has a save() method based on this page.


I've been looking at this same issue. It is saving the data to the database, and the formset is filled. The problem is that the save on instances = formset.save(commit=False) doesn't return a value. When I look at the built-in save method, it should give back the saved data.

Another weird thing about this, is that it seems to work on my friends MySQL backend, but not on his SQLITE3 backend. Next to that it doesn't work on my MySQL backend.


Local loop returns these print outs (on MySQL).. on sqlite3 it fails with a does not excist on the query

('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
0

精彩评论

暂无评论...
验证码 换一张
取 消