Значения HTML Input Tage не сохраняются в базе данных SQLite - Django
I am trying to save data from HTML Form to SQLite database. My database is connected to my app and project. I am able to enter from Django Admin, but my values from Input tag are not going in database.
Views.py
Models.py
class paddy_purchase(models.Model):
ref_no = models.IntegerField(primary_key='true')
token_no = models.CharField(max_length=20, unique='true')
agent_name = models.CharField(max_length=20)
trip_no = models.IntegerField()
date = models.DateField()
vehicle_no = models.CharField(max_length=10)
bora = models.IntegerField()
katta = models.IntegerField()
plastic = models.IntegerField()
farmer_name = models.CharField(max_length=30)
farmer_address = models.CharField(max_length=40)
farm_mob = models.CharField(max_length=10)
gross_weight = models.IntegerField()
tier_weight = models.IntegerField()
net_weight = models.IntegerField()
bora_weight = models.IntegerField()
suddh_weight = models.FloatField()
loading = models.IntegerField()
unloading = models.IntegerField()
unloading_point = models.CharField(max_length=20)
dharamkanta_man = models.CharField(max_length=10)
rate = models.IntegerField()
bardana = models.CharField(max_length=7)
gross_total = models.IntegerField()
deduction = models.IntegerField()
kanta = models.IntegerField()
hemali = models.IntegerField()
our_vehicle_rent = models.IntegerField()
agent_commission = models.IntegerField()
other_amt = models.IntegerField()
other_remarks = models.CharField(max_length=50)
advance = models.IntegerField()
net_total = models.IntegerField()
# For returning data in ADMIN SITE
def __str__(self):
return 'paddy_purchase'
This is the error that I am having. NOT NULL constraint failed: main_paddy_purchase.token_no
Here is a screen shot. Error Image
Ваша проблема в том, что token_no отсутствует в request.POST.
Вы используете везде request.POST.get(key), который, когда не может найти ключ, возвращает None.
Возможно, вы забыли добавить соответствующее поле input с правильным именем.
Я предлагаю вам взглянуть на Django Forms. И использовать их для проверки ввода пользователя и сохранения изменений в базе данных. Код также будет выглядеть намного более гладко.
Вы можете оставить свой models.py. Просто переименуйте модель в PaddyPurchase в соответствии с соглашениями об именовании в python.
Затем вам нужно будет создать ModelForm из вашей модели, которая автоматически возьмет все поля:
forms.py
class PaddyPurchaseForm(ModelForm):
class Meta:
model = PaddyPurchase
fields = (
"ref_no",
"token_no",
"agent_name",
"trip_no",
"date",
"vehicle_no",
"bora",
"katta",
"plastic",
"farmer_name",
"farmer_address",
"farm_mob",
"gross_weight",
"tier_weight",
"net_weight",
"bora_weight",
"suddh_weight",
"loading",
"unloading",
"unloading_point",
"dharamkanta_man",
"rate",
"bardana",
"gross_total",
"deduction",
"kanta",
"hemali",
"our_vehicle_rent",
"agent_commission",
"other_amt",
"other_remarks",
"advance",
"net_total",
)
Тогда вы можете использовать форму в вашем views.py:
from .forms import PaddyPurchaseForm
...
def add_record(request):
if request.method == 'POST':
form = PaddyPurchaseForm(request.POST))
if form.is_valid():
messages.success(request, 'Record saved successfully.')
return redirect('index')
else:
form = PaddyPurchaseForm()
return render(request, 'add.html', {'form':form})
Django Forms можно также использовать для вывода формы со всеми необходимыми входами в представление, я предлагаю вам попробовать. Чтобы сделать это, просто добавьте {{form}} в ваш <form ...> </form>. (Работает только тогда, когда вы указали form в функции рендеринга)
Вы можете прочитать больше о django формах в официальной документации
@Володимир Пискун
Спасибо за ваш ответ. Я попробовал использовать Django Forms и теперь все работает. Большое спасибо. Это было действительно полезно.