Объект '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.