Значения 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 и теперь все работает. Большое спасибо. Это было действительно полезно.

Вернуться на верх