В моем проекте я использую Django 1.11.10 и postgresql для базы данных. Когда кто-то вводит данные в поле «order_id», я хочу отправить ему столбец item_barcode, независимо от того, являются ли его первые 2 символа буквами. Как я могу это сделать?
модели.py
from django.db import models
class Customer(models.Model):
item_barcode = models.TextField(max_length=50,unique=True,null=True)
order_id = models.TextField(max_length=50,unique=True,null=True)
full_name = models.TextField(max_length=50)
company = models.TextField(max_length=60,blank=True)
email = models.EmailField(max_length=40)
phone_number = models.TextField(max_length=17)
note = models.TextField(max_length=256,blank=True)
def __str__(self):
return self.order_id
формы.py
class CustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = (
'order_id','full_name','company','email',
'phone_number','note')
просмотры.py
def guaform(request):
form = CustomerForm()
if request.method == "POST":
form = CustomerForm(request.POST)
if form.is_valid():
form.save(commit=True)
else:
HttpResponse("Error from invalid")
return render(request,'customer_form.html',{'form':form})
* Столбцы моей базы данных такие же, как и в models.py
Вы можете выполнить некоторую работу после проверки формы.
if form.is_valid():
#test to see if first two characters are letters
first_two_characters = form.cleaned_data['order_id'][0:2]
if first_two_characters.isAlpha():
#get an instance of the object without saving to db
form_uncommitted = form.save(commit=False)
#set the item_barcode field and only then save to db
form.uncommitted.item_barcode = form.cleaned_data['order_id'] #or what you want it to be
form_uncommitted.order_id = None
form_uncommitted.save
else:
#it's not a barcode so we can just save
form.save()
Конечно, вы можете просто указать form_uncommitted.order_id = None. Я обновил ответ.
Таким образом, он также сохраняет order_id. Могу ли я сделать это без сохранения в order_id?