简体   繁体   中英

How to solve UndefinedColumn error in Django

I am new to Django and trying to set up a couple of models, but have run into an error I can't seem to find a fix for.

This is the error that I am getting: psycopg2.errors.UndefinedColumn: column carts_cartitem.cart_id does not exist LINE 1: SELECT "carts_cartitem"."id", "carts_cartitem"."cart_id", "c...

This is my views file:

from django.shortcuts import render, HttpResponseRedirect
from django.urls import reverse

from products.models import Product

from .models import Cart, CartItem 

def view(request):
    try:
        the_id = request.session['cart_id']
    except:
        the_id = None
    if the_id:
        cart = Cart.objects.get(id=the_id)
        context = {'cart': cart}
    else:
        empty_message = 'Your cart is empty!'
        context = {'empty': True, 'empty_message': empty_message}

    template = 'cart/view.html'
    return render(request, template, context)

def update_cart(request, slug):
    try:
        the_id = request.session['cart_id']
    except:
        #create a cart 
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id 

    cart = Cart.objects.get(id=the_id)

    try:
        product = Product.objects.get(slug=slug)
    except Product.DoesNotExist:
        pass
    except:
        pass
    cart_item, created = CartItem.objects.get_or_create(cart=cart, product=product)
    if created:
        print('created')
    new_total = 0.00
    for item in cart.cartitem_set.all():
        line_total = float(item.product.price) * item.quantity
        new_total += line_total
    request.session['items_total'] = cart.cartitem_set.count() #count products
    cart.total = new_total
    cart.save()

    return HttpResponseRedirect(reverse('cart')) 

These are my models:

from django.db import models

class Product(models.Model):
    title = models.CharField(max_length=120)
    description = models.TextField(null=True, blank=True)
    price = models.DecimalField(decimal_places=2, max_digits=100, default=29.99)
    sale_price = models.DecimalField(decimal_places=2, max_digits=100, null=True, blank=True)
    slug = models.SlugField(unique=True)
    timestamp = models.DateTimeField(auto_now_add= True, auto_now=False)
    updated = models.DateTimeField(auto_now_add= False, auto_now=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

    class Meta:
        unique_together = ('title', 'slug')

    def get_absolute_url(self):
        return reverse('single_product', kwargs={'slug': self.slug})

class Cart(models.Model):
    total = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
    timestamp = models.DateTimeField(auto_now_add= True, auto_now=False)
    updated = models.DateTimeField(auto_now_add= False, auto_now=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return "Cart id: %s" %(self.id)

class CartItem(models.Model):
    cart = models.ForeignKey(Cart, on_delete = models.CASCADE, blank=True, null=True)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    line_total = models.DecimalField(default=10.99, max_digits=1000, decimal_places=2)
    timestamp = models.DateTimeField(auto_now_add= True, auto_now=False)
    updated = models.DateTimeField(auto_now_add= False, auto_now=True)

    def __str__(self):
        return self.product.title

Traceback:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/cart/slug_one/

Django Version: 2.2.1
Python Version: 3.6.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'products',
 'carts']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  84.                 return self.cursor.execute(sql, params)

The above exception (column carts_cartitem.cart_id does not exist
LINE 1: SELECT "carts_cartitem"."id", "carts_cartitem"."cart_id", "c...
                                      ^
) was the direct cause of the following exception:

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/me/Desktop/farmacia.testing/carts/views.py" in update_cart
  44.     cart_item, created = CartItem.objects.get_or_create(cart=cart, product=product)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
  82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/query.py" in get_or_create
  538.             return self.get(**kwargs), False

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/query.py" in get
  402.         num = len(clone)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/query.py" in __len__
  256.         self._fetch_all()

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/query.py" in _fetch_all
  1242.             self._result_cache = list(self._iterable_class(self))

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/query.py" in __iter__
  55.         results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/models/sql/compiler.py" in execute_sql
  1100.             cursor.execute(sql, params)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  99.             return super().execute(sql, params)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  67.         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute_with_wrappers
  76.         return executor(sql, params, many, context)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  84.                 return self.cursor.execute(sql, params)

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/utils.py" in __exit__
  89.                 raise dj_exc_value.with_traceback(traceback) from exc_value

File "/Users/me/.local/share/virtualenvs/farmacia.testing-0E8ur1aw/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  84.                 return self.cursor.execute(sql, params)

Exception Type: ProgrammingError at /cart/slug_one/
Exception Value: column carts_cartitem.cart_id does not exist
LINE 1: SELECT "carts_cartitem"."id", "carts_cartitem"."cart_id", "c...

Looks like the carts_cartitem table was corrupt. As a few were pointing out that cart_id was not present when I took a look at the table. For some reason I could not get the migrations to update. The fix was to delete the database and run the migrations newly and is now working as intended.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM