Как добавить к полю массива в Python DjangoPython

Программы на Python
Ответить
Anonymous
 Как добавить к полю массива в Python Django

Сообщение Anonymous »

Я создаю сайт электронной коммерции и хочу хранить элементы корзины в целочисленном поле массива. В качестве базы данных я использую PostGreSql.
Я создал модель корзины, расширив модель пользователя Django. Вот мои модели

Код: Выделить всё

class UserCart(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
user_product=models.IntegerField(blank=True, null=True)
cart_products = ArrayField(
models.IntegerField(blank=True),
default = list
)

User.profile = property(lambda u:UserCart.objects.get_or_create(user=u)[0])
Ниже мой Form.py. Я создал только базовую форму
из форм импорта django
из .models import UserCart
из моделей импорта django.db
из django.contrib.postgres.fields import ArrayField

Код: Выделить всё

class UserCartForm (forms.ModelForm):

class Meta:
model= UserCart
fields = ('user_product',)
Я много искал в Интернете, но не смог найти соответствующий ответ. Я хочу, чтобы всякий раз, когда пользователь нажимает кнопку «Добавить в корзину», этот Product_id сохранялся в массиве cars_products. Я где-то читал, что ArrayFields ведет себя как список в Django, поэтому вот мои представления.py

Код: Выделить всё

@login_required
def user_cart(request):
if request.method=='POST':
form=UserCartForm(request.POST , instance=request.user.profile)
if form.is_valid():
post = form.save(commit=False)
post.cart_products.append(99)
post.save()
return HttpResponseRedirect('/user_login/loggedin')
else:
HttpResponse("Error")
else:
user=request.user
profile=user.profile
form= UserCartForm(instance=profile)
args={}
args.update(csrf(request))
args['form']=form
return render_to_response('cartapi.html' ,args)
Это выдает мне ошибку

Код: Выделить всё

 AttributeError at /cart/ac/
'NoneType' object has no attribute 'append'
Request Method:    POST
Request URL:   http://localhost:8000/cart/ac/
Django Version:    1.11.2
Exception Type:    AttributeError
Exception Value:
'NoneType' object has no attribute 'append'
Exception Location:    C:\Users\Muhammad
Jawad\AppData\Local\Programs\Python\Python36-32\mysite\cart\views.py in
user_cart, line 19
Python Executable: C:\Users\Muhammad
Jawad\AppData\Local\Programs\Python\Python36-32\python.exe
А если я таким образом сохраню корзину_продуктов

Код: Выделить всё

 post.cart_products=99
Тогда выдает эту ошибку

Код: Выделить всё

 column "cart_products" is of type int4range but expression is of type integer
LINE 1: ...er_id" = 1, "user_cart" = 3000, "cart_products" = 99 WHERE "...
^
HINT:  You will need to rewrite or cast the expression.
Request Method:    POST
Request URL:   http://localhost:8000/cart/ac/
Django Version:    1.11.2
Exception Type:    ProgrammingError
Exception Value:
column "cart_products" is of type int4range but expression is of type integer
LINE 1: ...er_id" = 1, "user_cart" = 3000, "cart_products" = 99 WHERE "...
^
HINT:  You will need to rewrite or cast the expression.
Пожалуйста, помогите мне в этом вопросе. Подводя итог моему вопросу:
Как я могу получить user_product в качестве идентификатора и сохранить его в cart_products

Подробнее здесь: https://stackoverflow.com/questions/458 ... hon-django
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»