Отображение 1 при отсутствии данных в базе данных
Я пытаюсь генерировать инкрементный идентификатор каждый раз, когда я добавляю новые данные в свою модель. здесь я получаю следующий номер каждый раз, когда я добавляю новые данные. но если в моей таблице нет никаких данных, она выдает мне ошибку. У объекта 'NoneType' нет атрибута 'tax_id'
Вот мой код
views.py
def tax_settings(request):
latest_id = (Tax_Settings.objects.last()).tax_id+1
if request.method == 'POST':
tax_id = latest_id
name = request.POST['tax_name']
tax_percentage = request.POST['tax_percentage']
tax_details=Tax_Settings.objects.create(tax_id=tax_id, name=name, tax_percentage=tax_percentage)
tax_details.save()
next_id = (Tax_Settings.objects.last()).tax_id+1
return render(request,"settings/tax-settings.html",{"latest_id":next_id})
else:
return render(request,"settings/tax-settings.html",{"latest_id":latest_id})
html
<input type="text" class="form-control" placeholder="{{latest_id}}" name="tax_id" disabled>
какое условие я могу задать моему latest_id, если data(tax_id) не существует?
Вы можете просто добавить:
if latest_id is None:
latest_id = 1
Вы пытаетесь сделать слишком много в слишком малом количестве строк кода. Где бы вы ни использовали queryset .last()
или .first()
, вы должны явно обработать случай, когда он возвращает None
!
Вам нужен код вида:
o = Tax_Settings.objects.last()
if o is not None:
tax_id = o.tax_id + 1
else:
tax_id = 1 # if that's a sensible default value
или даже
o = Tax_Settings.objects.last()
assert o is not None, "This can't happen!" # except obviously, it does in this question.
Либо вы сначала создаете единственную запись, и вам не нужно обрабатывать это, либо
tax_id = 0
latest_rec = (Tax_Settings.objects.last())
if latest_rec is not None:
latest_id = latest_rec.tax_id+1
Если я правильно понял, у вас проблемы с первой строкой в предоставленной функции:
latest_id = Tax_Settings.objects.last().tax_id+1
когда у вас нет данных, т.е. Tax_Settings.objects.last()
это None
.
Вы должны определить ID по умолчанию, например 0
, который будет назначен в случае отсутствия объектов:
def tax_settings(request):
if Tax_Settings.objects.last() is not None:
# some data already stored
latest_id = Tax_Settings.objects.last().tax_id
else:
# no data present yet
latest_id = 0
. . .
btw. Я не уверен, почему вы увеличиваете последнее значение в начале, но вам нужно принять во внимание, что если ваш последний ID по умолчанию 0
, то ID первой сохраненной единицы данных будет 1
.
Я делаю это, чтобы решить проблему, и она также работает. Спасибо за ваш ответ
tax_data=Tax_Settings.objects.all()
if not tax_data:
print("no data found")
latest_id=1
else:
latest_id = (Tax_Settings.objects.last()).tax_id+1