Как сделать так, чтобы при заполнении формы заказа в поле "Nickname" автоматически вписывался id авторизованного сейчас пользователя. Либо его Логин, но ЛОГИН должен соответствовать своему id в Базе данных.
Сейчас форма выводится так,что если пользователь хочет оформить заказ,то ему предлагается ввести свой ID ,который автоматом создается в БД при регистрации. Конечно пользователь его не знает.
Нужно передать id авторизованного пользователя в поле nickname
models.py
from django.db import models
import django
from shop.models import Product
from django.contrib.auth.models import User
class Order(models.Model):
nickname = models.ForeignKey(User, on_delete=models.CASCADE)
email = models.EmailField()
postal_code = models.CharField(max_length=20)
city = models.CharField(max_length=100)
street = models.CharField(max_length=100, default="s")
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')
product = models.ForeignKey(Product, related_name='order_items')
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
views.py
def order_create(request):
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save()
for item in cart:
OrderItem.objects.create(order=order,
product=item['product'],
price=item['price'],
quantity=item['quantity'])
# очистка корзины
cart.clear()
return render(request, 'orders/order/created.html',
{'order': order})
else:
form = OrderCreateForm
return render(request, 'orders/order/create.html',
{'cart': cart, 'form': form})
forms.py
from django import forms
from .models import Order
from django.contrib.auth.models import User
class OrderCreateForm(forms.ModelForm):
class Meta:
model = Order
fields = ['nickname', 'email', 'postal_code', 'city', 'street',]
widgets = {
'nickname': forms.TextInput(attrs={"class": "form-control", "placeholder": "Имя"}),
'email': forms.EmailInput(attrs={"class": "form-control", "placeholder": "e-mail"}),
'postal_code': forms.TextInput(attrs={"class": "form-control", "placeholder": "Почтовый индекс"}),
'city': forms.TextInput(attrs={"class": "form-control", "placeholder": "Город"}),
'street': forms.TextInput(attrs={"class": "form-control", "placeholder": "Улица"}),
}
admin.py
from django.contrib import admin
from .models import Order, OrderItem
class OrderItemInline(admin.TabularInline):
model = OrderItem
raw_id_fields = ['product']
class OrderAdmin(admin.ModelAdmin):
list_display = ['id', 'nickname' ,'email',
'postal_code', 'city', 'paid',
'created', 'updated']
list_filter = ['paid', 'created', 'updated']
inlines = [OrderItemInline]
admin.site.register(Order, OrderAdmin)
html
<form action="." method="post" class="order-form">
{{form.as_p}}
</form>