RelatedObjectDoes not exist at User has no customer(用户没有客户)。

问题描述 投票:0回答:1

我有一个Django网页应用。我有一个产品应用和一个账户应用。当我在账户应用上注册一个新用户时,它成功地创建了一个用户,然后它被重定向到我的主页,在那里显示了一堆产品(由超级用户控制)。但是当我在 http:/127.0.0.1:8000login 使用新创建的用户,而不是管理员,当登录成功后,我应该被重定向到我的主页,但有一个错误,说。RelatedObjectDoes not exist at User has no customer. 我还是新手,谢谢!

这是我的productsmodels.py

from django.db import models

from django.contrib.auth.models import User

class Customer(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)

    name = models.CharField(max_length=100, null=True)

    email = models.CharField(max_length=100, null=True)

我的管理面板与所有的模型

客户模式

我的注册视图

from django.shortcuts import render, redirect

from .forms import RegisterForm

def register(response):
    if response.method == "POST":
        form = RegisterForm(response.POST)
        if form.is_valid():
            form.save()

        return redirect('/')
    else:
        form = RegisterForm()

    return render(response, "register/register.html", {'form':form})

产品应用视图.py文件

def home(request):
    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
    else:
        items = []
        order = {'get_cart_total':0, 'get_cart_items':0}
        cartItems = order['get_cart_items']
    #this gets all product objects in the database.
    products = Product.objects.all()
    #counts how many special offers we have by using count() function
    special_offer = Product.objects.filter(special_offer=True).count()
    #returns the average price of all the product objects that we have
    aggr = Product.objects.aggregate(average_price=Avg('price'))
    average_price = round(aggr['average_price'], 2)
    #passes the product objects as a context to be passed to a template.
    context = {'products' : products, 'special_offer' : special_offer, 'average_price' : average_price, 'cartItems' : cartItems}

    return render(request, 'store.html', context)

回溯

Environment:


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

Django Version: 3.0.6
Python Version: 3.8.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'TheApp',
 'crispy_forms',
 'register.apps.RegisterConfig']
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 (most recent call last):
      File "\Python\Python38\site-packages\django\core\handlers\exception.py", line 34, in inner
        response = get_response(request)
      File "\Python\Python38\site-packages\django\core\handlers\base.py", line 115, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "\Python\Python38\site-packages\django\core\handlers\base.py", line 113, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "\Desktop\django_projects\TheEcommerceProject\TheApp\views.py", line 13, in home
        customer = request.user.customer
      File "\Python\Python38\site-packages\django\utils\functional.py", line 225, in inner
        return func(self._wrapped, *args)
      File "\Python\Python38\site-packages\django\db\models\fields\related_descriptors.py", line 420, in __get__
        raise self.RelatedObjectDoesNotExist(

    Exception Type: RelatedObjectDoesNotExist at /
    Exception Value: User has no customer.
django django-models e-commerce
1个回答
0
投票

你好,首先在客户模型中的onetoonefiled中添加related_name属性,和下面的代码一样。

user = models.OneToOneField(User, on_delete=models.CASCADE, related_name = 'customer', null=True, blank=True)

进行迁移,迁移后再试

© www.soinside.com 2019 - 2024. All rights reserved.