Как передать значение таблицы в другой экземпляр модели в django?
Я хочу передать значение базы данных в другую модель, используя метод экземпляра. и затем сохранить его в БД. Но когда я нажимаю submit, значение не сохраняется в БД.
вот мой код model.py
import datetime
from django.db import models
from django.contrib.auth.models import User
class Customer(models.Model):
id_number = models.CharField(max_length=15, null=False)
name = models.CharField(max_length=100, null=False)
customer_order = models.CharField(max_length=100, null=False)
order_date = models.DateTimeField(auto_now_add=False, auto_now=False, blank=True, null=True, auto_created=False)
phone_number = models.CharField(max_length=20, null=True)
def __str__(self):
return self.name
class SpecialOffer(models.Model):
customer = models.ForeignKey(Customer, null=True, on_delete=models.CASCADE)
order_date = models.DateTimeField(auto_now_add=False, auto_now=False, blank=True, null=True, auto_created=False)
phone_number = models.CharField(max_length=20, null=True)
customer_prizes = models.CharField(max_length=100, null=True)
def __str__(self):
return self.customer
здесь есть две модели,
для form.py вот коды :
from django import forms
from .models import *
class CustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = ['id_number', 'name', 'customer_order', 'order_date', 'phone_number']
widgets = {
'id_number':forms.TextInput(attrs={'class':'form-control', 'type':'text'}),
'name': forms.TextInput(attrs={'class': 'form-control', 'type': 'text'}),
'customer_order': forms.TextInput(attrs={'class':'form-control', 'type':'text'}),
'order_date': forms.DateTimeInput(attrs={'class': 'form-control datetime-local', 'type': 'text', 'data-target': '#datetimepicker', 'id':'datetimepicker'}),
'phone_number' : forms.TextInput(attrs={'class':'form-control', 'type':'text'}),
}
class SpecialOfferForm(forms.ModelForm):
class Meta:
model = SpecialOffer
fields = ['order_date', 'phone_number', 'customer_prizes']
widgets = {
'order_date':forms.DateTimeInput(attrs={'class':'form-control', 'type':'text'}),
'phone_number': forms.TextInput(attrs={'class': 'form-control', 'type': 'text'},
'customer_prizes': forms.TextInput(attrs={'class':'form-control', 'type':'text'}),
}
ok после получения формы и модели, я создаю входную форму для Customer в моем views.py
Здесь views.py
from .forms import *
from django.http import HttpResponseRedirect
def CustomerInput(request):
customerForm = CustomerForm()
if request.method == 'POST':
customerForm = CustomerForm(request.POST or None)
if customerForm.is_valid()
return HttpResponseRedirect('/')
return render(request, 'dashboard/customerform.html', {'customerForm': customerForm})
После некоторого ввода я отображаю данные в шаблоне Customer.
def CustomerTemplate(request):
get_customer = Customer.objects.all()
return render(request, 'dashboard/customerDisplay.html', {'get_customer': get_customer})
в шаблоне будет отображено значение данных из формы Customer Form, которое было введено.
Теперь мне нужно перейти к форме специального предложения из этого дисплея напрямую.
вот мой код views.py для формы SpecialOffer.
def SpecialOfferForm(request, pk):
customer_data = Customer.objects.get(id=pk)
form_offer = SpecialOfferForm()
if request.method == 'POST':
form_offer = SpecialOfferForm(request.POST, instance=customer_data)
if form_offer.is_valid():
obj = form_offer.save(commit=False)
obj.order_date = customer_data.order_date
obj.phone_number = customer_data.phone_number
obj.save()
return HttpResponseRedirect('/')
context = {'form_offer':form_offer, 'customer_data': customer_data}
return render(request, 'dashboard/specialForm.html', context)
и затем в специальном шаблоне предложения
<form action=" " method="POST">
{% csrf_token %}
<!-- Data From DB >
<div class="card-body">
<div class="form-group">
<label>Customer Name</label>
{{customer_data.name}}
</div>
<div class="card-body">
<div class="form-group">
<label>Customer Order</label>
{{customer_data.customer_order}}
</div>
<div class="card-body">
<div class="form-group">
<label>**Customer Prizes**</label>
{{form_offer.customer_prizes}}
</div>
</form>
Теперь, когда я отправляю Призы для клиентов в моем шаблоне. Программа не сохраняет данные в таблицу(SpecialOffer). Мне нужно разделить модель Customer и модель SpecialOffer, но мне нужно передать некоторые данные из модели Customer в Special Offer.