Я схожу с ума, пытаясь понять это. У меня просто есть таблица с отношением один к одному с таблицей User. Частично код для модели:
class Client(models.Model):
user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE)
Когда таблица создается, и я пытаюсь получить доступ к информации о таблице изнутри admin, он говорит, что «id» не назначен, но он назначает поле, которое оно генерирует автоматически, называется user_id, и это поле заполняется первичным ключом. Кажется, он просто не распознает его как первичный ключ или не обращается к данным, потому что «id» не найден.
Когда я удаляю первичный ключ = True и оставляю его как OnetoOneField, не назначая его в качестве первичного ключа, как показано ниже:
class Client(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
он не сохраняется, и я получаю ошибку целостности :
IntegrityError at /client_intake/1/
NOT NULL constraint failed: intake_client.user_id
Очевидно, что без установки первичного ключа он пытается сохранить поле user_id как нулевое значение. Таким образом, я не могу установить OnetoOne в качестве первичного ключа, и я не могу установить его, если он не является первичным ключом, без получения ошибки. Сохраняется только тогда, когда первичный ключ имеет значение true, но тогда я не могу получить доступ к данным, даже если поле user_id содержит первичный ключ, потому что оно говорит, что «id» не найден.
Мой admin.py включает в себя следующее:
list_display = ('user_id', 'client_lname', 'client_fname',
'client_mname', 'submitted')
Я получаю сообщение об ошибке, что идентификатор отсутствует, когда я нажимаю на поле user_id. Я потратил около недели, пытаясь выяснить это, и попробовал все под солнцем, включая удаление моей базы данных и миграций, по крайней мере, дюжину раз, пробуя различные аспекты назначения клавиш. Я в тупике. Может ли кто-нибудь помочь мне здесь?
Вот мой файл views.py:
@login_required(login_url=reverse_lazy('login'))
def client_intake_req(request, pk=None, client=None):
# First test to see if there is an existing model for client
# If there is an existing form, populate and render it; otherwise create
# a new one
if pk:
try:
client = Client.objects.get(user_id=pk)
# If the object exists:
submitted = False
if request.method == 'POST':
form = ClientIntakeForm(request.POST, instance=client)
if form.is_valid():
form.save()
return HttpResponseRedirect('?submitted=True')
else:
form = ClientIntakeForm(instance=client)
if 'submitted' in request.GET:
submitted = True
return render(request, 'client_intake.html',{'form': form,
'submitted': submitted})
except ObjectDoesNotExist:
submitted = False
if request.method == 'POST':
form = ClientIntakeForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('?submitted=True')
else:
form = ClientIntakeForm()
if 'submitted' in request.GET:
submitted = True
return render(request, 'client_intake.html',
{'form': form, 'submitted': submitted})