Django: Регистрация ModelForm перезаписывает объект prevoius
Я пытался сделать свой собственный проект на основе проекта из Codecademy Django path. Где в качестве примера используется vetoffice. В настоящее время я работаю над созданием базового кода и добавлением Forms. В настоящее время я пытаюсь использовать ModelForms для регистрации нового владельца, а затем отобразить список всех зарегистрированных владельцев в ветофисе. Но когда я регистрирую нового владельца, предыдущий владелец как бы перезаписывается, и отображается только новый.
Я совсем новичок в написании Django, поэтому мой код не будет идеальным.
Модель владельца:
class Owner(models.Model):
#The Owner table, with OwnerID as primary key
#Owner can own several pets
"""Create the Owner SQLite Table.
Primary Key: OwnerID, used as Foreign Key for paitient
Fields: first_name(String), last_name(string), phone(string(of numbers))
__str__ for easy coupling first and last name of owner.
Function: has_multiple_pets
reurns boolean True if owner have several pets registered with the Vet Office.
"""
ownerID = models.BigAutoField(primary_key=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
phone = models.CharField(max_length=30)
def __str__(self):
#Returns the first and last name of owner with whitespace between
return self.first_name + " " + self.last_name
def has_multiple_pets(self):
'''Do Owner have multiple pets.
Checks if a owner have multiple pets registered at the vet Vetoffice
and returns a boolean.
parameters: self
returns: boolean (True if owned pets are greater then 1)
'''
return self.patient_set.count() > 1
Форма владельца:
class OwnerForm(ModelForm):
class Meta:
model = Owner
fields = ['first_name', 'last_name', 'phone']
labels = {
'first_name' : 'First Name:',
'last_name' : 'Family name:',
'phone' : 'Phone'
}
Мнение владельца:
def owner(request):
owner_list = Owner.objects.order_by('last_name')
context = {'owner_list' : owner_list}
return render(request, 'vetoffice/owner.html', context)
def register_owner(request):
if request.method == "POST":
form = OwnerForm(request.POST)
if form.is_valid():
form.save()
return redirect('vetoffice:home')
else:
form = OwnerForm()
return render(request, 'vetoffice/register_owner.html', {'form' : form})
И HTML, используемый для отображения списка владельцев:
<ul>
{% for owner in owner_list %}
<li>
Name: {{ owner.last_name }}, {{ owner.first_name }} -- Phone: {{ owner.phone }}
</li>
{% endfor %}
</ul>
Я хочу, чтобы форма регистрации владельца автоматически генерировала уникальный первичный ключ, но когда я пытаюсь зарегистрировать нового владельца, я получаю:
NOT NULL constraint failed: vetoffice_owner.ownerID
Метод запроса: POST URL запроса: http://127.0.0.1:8000/register/owner. Версия Django: 3.2.8 Тип исключения: IntegrityError Значение исключения:
NOT NULL constraint failed: vetoffice_owner.ownerID