Проблема с Django Назначение первичного ключа таблицы «один к одному» - «ID» не найден и «NOT NULL CONSTRAINT FAILED» - PullRequest
1 голос
/ 15 апреля 2020

Я схожу с ума, пытаясь понять это. У меня просто есть таблица с отношением один к одному с таблицей 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...