Объект 'CustomUser' не является итерируемым

Я пытаюсь создать систему регистрации/логина на основе типа пользователя для моего приложения электронной коммерции. Я использовал следующие коды в моем файле views. Вот фрагмент кода из моего models.py. Просто приведен класс клиента, поскольку я сосредоточился на нем в первую очередь.

class CustomUser(AbstractUser):
    user_type_choices=((1,"Merchant"),(2,"Customer"))
    user_type=models.CharField(max_length=255,choices=user_type_choices,default=1)
    class Meta(AbstractUser.Meta):
        swappable = "AUTH_USER_MODEL"
class CustomerUser(models.Model):
    auth_user_id=models.OneToOneField(CustomUser,on_delete=models.CASCADE)
    user=models.OneToOneField(CustomUser,on_delete=models.CASCADE, related_name='customer', null= True,blank=True)
    name= models.CharField(max_length = 255, null= True)
    firstname = models.CharField(max_length = 255, null=True)
    lastname = models.CharField(max_length = 255, null=True)
    email = models.CharField(max_length = 255, null=True)
    profile_pic=models.FileField(default="")
    created_at=models.DateTimeField(auto_now_add=True)

Итак, пока я могу сказать, что я вошел в систему, но не могу получить доступ к своей домашней странице, поскольку я получил следующую ошибку.

TypeError at /
'CustomUser' object is not iterable
.......
 Local vars
F:\rewards\projectreward\rewardapp\userviews.py, line 152, in store
    data = cartData(request) …
Local vars
F:\rewards\projectreward\rewardapp\utils.py, line 43, in cartData
    order, created = Order.objects.get_or_create(request.user, complete=False) …

Я не уверен, почему это влияет на мою функцию cartData в utlis.py. Она прекрасно работала, когда я не использовал базовый логин типа пользователя. Однако, вот cartData из utils.py.

def cartData(request):
    if request.user.is_authenticated:
        order, created = Order.objects.get_or_create(request.user, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
    else:
        cookieData = cookieCart(request)
        cartItems = cookieData['cartItems']
        order = cookieData['order']
        items = cookieData['items']
    return {'cartItems': cartItems, 'order': order, 'items':items}

мой файл forms.py имеет вид:

class CustomerSignUpForm(UserCreationForm):


    mob = forms.IntegerField(min_value = 0, max_value = 9000000000000)
    first = forms.CharField(max_length = 255)
    last = forms.CharField(max_length = 255)
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = ['first', 'last' ,'username', 'email', 'password1', 'password2', 'mob']

последние представления для регистрации и входа выглядят следующим образом:

def customerSignUpView(request):

    form_class = CustomerSignUpForm

    if request.method == 'POST':
        form = CustomerSignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.save()
            user = authenticate(username=user.username, password=user.password)
            return redirect('login')
        else:
            form = form_class()
            return render(request, 'usertemplates/register.html', {'form': form})

def loginUser(request):
    page = 'login'

    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('store')
        else:
            messages.warning(request, "Invalid Credentials")
            return redirect('login')
    return render(request, 'usertemplates/login.html', {'page': page})

Разве get_or_create() не использует kwargs? В этом случае вам понадобится что-то вроде

order, created = Order.objects.get_or_create(customer=request.user, complete=False)

где 'customer' - имя поля внешнего ключа пользователя в модели Order.

Вернуться на верх