Как я могу использовать целочисленное поле в качестве внешнего ключа в Django?
Вы можете увидеть мои файлы ниже. У меня есть две модели: Order и OrderedBook. Когда пользователь делает заказ, я создаю несколько экземпляров OrderedBook (их количество зависит от того, сколько книг заказал пользователь). Кроме того, OrderedBook имеет поле 'orderNumber', которое является внешним ключом. Однако я хочу, чтобы это было целое число, но Django требует экземпляр Order. Как я могу реализовать это?
models.py
class Order(models.Model):
orderNumber = models.AutoField('Номер замовлення', primary_key=True)
userFirstName = models.CharField('Ім\'я', max_length=32)
userLastName = models.CharField('Прізвище', max_length=32)
userPatronymic = models.CharField('По-батькові', max_length=32)
userEmail = models.EmailField('Електронна адреса', )
userPhone = models.CharField('Номер телефону', max_length=13, validators=[phoneNationalFormatValidator, phoneLessNumbersValidator, phoneValidFormatValidator])
delivery = models.CharField('Доставка', choices=DELIVERY, max_length=10, default='NovaPoshta')
date = models.DateTimeField(default = timenow)
deliveryAddress = models.CharField(max_length=128, default='')
def __str__(self):
return f"Замовлення №{self.orderNumber}"
class OrderedBook(models.Model):
orderNumber = models.ForeignKey(Order, on_delete=CASCADE, to_field='orderNumber')
user = models.ForeignKey(CustomUser, on_delete=CASCADE)
book = models.ForeignKey(Book, on_delete=CASCADE)
def __str__(self):
return f'Замовлення №{self.orderNumber} - {self.book}'
views.py
def cart(request):
items = CartItem.objects.filter(user=request.user)
total = sum(x.book.price for x in items)
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
form.save()
theSameForm = form.save()
# after purchase delete all ordered books from user's cart and reduce their count by 1
for cartItem in items:
book = Book.objects.get(ISBN=cartItem.book.ISBN)
book.number -= 1
book.save()
newOrderedBook = OrderedBook.objects.create(
orderNumber = theSameForm.pk, # problem
user = request.user,
book = book,
)
cartItem.delete()
return redirect('index')
context = {
'items': items,
'total': total,
'form': form
}
return render(request, 'cart.html', context)
form = OrderForm()
context = {
'items': items,
'total': total,
'form': form
}
return render(request, 'cart.html', context)
P.S. Как вы видите, я установил to_field
параметр в поле OrderedBook orderNumber. Однако для этого по-прежнему требуется экземпляр Order