Search code examples
pythonpython-3.xdjangotuplestypeerror

django: TypeError: 'tuple' object is not callable


Getting a type error, 'tuple' object is not callable. Any idea what it could be? (dont worry about the indentation. It copies in weird.) I'm trying to create choices based on PackSize of storeliquor.

Views.py:

def storeliquor(request, store_id, liquor_id):        
a = StoreLiquor.objects.get(StoreLiquorID=liquor_id)
s = Store.objects.get(StoreID=store_id)
x = Order.objects.get(storeID=s, Active=True)
y = a.OffPremisePrice
c = a.BottleSize

g = request.POST.get('OrderAmount', '')
b = a.PackSize
h = b*2
d = b*3
e = b*4
r = b*5
if c == "1750 ML":
    pack_size = (
        ('1', '1')
        ('3', '3')
        (b, b)
        (h, h)
        (d, d)
        (e, e)
        (r, r)
    )
elif c == "1000 ML":
    pack_size = (
        ('1', '1')
        ('3', '3')
        ('6', '6')
        (b, b)
        (h, h)
        (d, d)
        (e, e)
        (r, r)
    )
elif c == "750 ML":
    pack_size = (
        ('1', '1')
        ('3', '3')
        ('6', '6')
        (b, b)
        (h, h)
        (c, d)
        (e, e)
        (r, r)
    )     
elif c == "375 ML":
    pack_size = (
        ('3', '3')
        ('6', '6')
        ('12', '12')
        (b, b)
        (h, h)
        (d, d)
        (e, e)
        (r, r)
    )        
elif c == "200 ML":
    pack_size = (
        ('12', '24')
        ('24', '24')
        (b, b)
        (c, c)
        (c, d)
        (e, e)
        (r, r)
    ) 
else:
    pack_size = (
        (b, b)
        (c, c)
        (c, d)
        (e, e)
        (r, r)
    )        




if request.method == "POST":
    f = AddToOrderForm(request.POST)

    if f.is_valid():
        z = f.save(commit=False)
        z.TotalPrice = (float(y)) * (float(g))
        z.storeliquorID = a
        z.orderID = x

        z.save()        

    return HttpResponseRedirect('/stores/get/%s' % store_id)

else:
    f = AddToOrderForm()
    f.fields['OrderAmount'].choices = pack_size      
args = {}


args['liquor'] = a
args['s'] = s
args['form'] = f   

return render(request,'storeliquor.html', args)

Models file:

class LiquorOrder(models.Model):

LiquorOrderID = models.AutoField(primary_key=True)
storeliquorID = models.ForeignKey(StoreLiquor)
orderID = models.ForeignKey(Order)
OrderAmount = models.CharField('Order Amount', max_length=3)
TotalPrice = models.DecimalField('Total Price', max_digits=5, decimal_places=2)
StorePrice = models.DecimalField('Store Price', max_digits=5, decimal_places=2)

Forms file:

class AddToOrderForm(forms.ModelForm):

class Meta:
    model = LiquorOrder
    fields = ('OrderAmount', 'StorePrice')

Solution

  • You're missing comma (,) inbetween:

    >>> ((1,2) (2,3))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object is not callable
    

    Put comma:

    >>> ((1,2), (2,3))
    ((1, 2), (2, 3))