Answer the question
In order to leave comments, you need to log in
How to bind an order to a specific user to further display the order history in the profile?
#models.py
class Order(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField()
address = models.CharField(max_length=250)
postal_code = models.CharField(max_length=20)
city = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
class Meta:
ordering = ('-created',)
verbose_name = 'Заказ'
verbose_name_plural = 'Заказы'
def __str__(self):
return 'Order {}'.format(self.id)
def get_total_cost(self):
return sum(item.get_cost() for item in self.items.all())
class OrderItem(models.Model):
order = models.ForeignKey(Order, related_name='items',on_delete=models.CASCADE)
product = models.ForeignKey(Product, related_name='order_items',on_delete=models.CASCADE)
price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.PositiveIntegerField(default=1)
def __str__(self):
return '{}'.format(self.id)
def get_cost(self):
return self.price * self.quantity
#forms.py
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=100, required=True)
last_name = forms.CharField(max_length=100, required=True)
email = forms.EmailField(max_length=250, help_text='eg. [email protected]')
class Meta:
model = User
fields = ('first_name', 'last_name', 'username', 'password1', 'password2', 'email')
class OrderCreateForm(forms.ModelForm):
class Meta:
model = Order
fields = ['first_name', 'last_name', 'email', 'address', 'postal_code', 'city']
#views,py
def signUpView(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
signup_user = User.objects.get(username=username)
user_group = Group.objects.get(name='User')
user_group.user_set.add(signup_user)
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
def order_create(request):
cart = Cart.objects.get(cart_id=_cart_id(request))
cart_item = CartItem.objects.filter(cart=cart,active=True)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save()
for item in cart_item:
OrderItem.objects.create(order=order,
product=item.product,
price=item.product.price,
quantity=item.quantity)
# очистка корзины
cart_item.delete()
return render(request, 'created.html',
{'order': order})
else:
form = OrderCreateForm
return render(request, 'create.html',
{'cart': cart_item, 'form': form})
Answer the question
In order to leave comments, you need to log in
make a field in the Order model
user = models.ForegeinKey(Users, verbose_name = _("Пользователь"), on_delete=models.SET_NULL, null=True, blank=True)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question