TypeError в моделях - PullRequest
       11

TypeError в моделях

0 голосов
/ 08 июня 2019

Я получаю эту ошибку:

user = models.OneToOneField (Пользователь) Ошибка типа: init () отсутствует 1 обязательный позиционный аргумент: 'on_delete'

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class UserProfileInfo(models.Model):

    # creating relationship
    user = models.OneToOneField(User)

    # additional attributes
    portfolio = models.URLField(blank=True)
    picture = models.ImageField(upload_to='profile_pics', blank=True)

    def __str__(self):
        return self.user.username

Ответы [ 3 ]

1 голос
/ 08 июня 2019

Здесь можно получить ответ на похожий вопрос Получение TypeError: __init __ () отсутствует 1 обязательный позиционный аргумент: 'on_delete' при попытке добавить родительскую таблицу после дочерней таблицы с записями

В основном следует исправить проблему с URL

С Django 2.0 on_delete требуется:

user = models.OneToOneField(User, on_delete=models.CASCADE)
1 голос
/ 08 июня 2019

положить 'on_delete = models.CASCADE' в конструкторе

что он делает: когда вы удаляете объект пользователя, как вы указали в поле пользователя вашей модели. он также удалит объект модели UserProfileInfo для конкретного пользователя.

1 голос
/ 08 июня 2019

Как показывает ошибка, вам нужно указать, что должно произойти, если объект, на который вы ссылаетесь, удаляется параметром on_delete= [Django-doc] . Например:

class UserProfileInfo(models.Model):

    # creating relationship
    user = models.OneToOneField(User<b>, on_delete=models.CASCADE</b>)

    # additional attributes
    portfolio = models.URLField(blank=True)
    picture = models.ImageField(upload_to='profile_pics', blank=True)

    def __str__(self):
        return self.user.username

Варианты здесь:

CASCADE

Каскад удаляет. Django эмулирует поведение ограничения SQL ON DELETE CASCADE, а также удаляет объект, содержащий ForeignKey.

Model.delete() не вызывается на связанных моделях, но pre_delete и post_delete сигналы отправляются для всех удаленных объектов.

PROTECT

Предотвратить удаление объекта, на который есть ссылка, подняв ProtectedError, подкласс django.db.IntegrityError.

SET_NULL

Установить ForeignKey ноль; это возможно, только если null равно True.

SET_DEFAULT

Установите ForeignKey в значение default; по умолчанию для ForeignKey должен быть установлен.

SET()

Установите для ForeignKey значение, переданное в SET(), или если оно вызывается передается, результат вызова. В большинстве случаев, передавая вызываемый будет необходимо, чтобы избежать выполнения запросов во время вашего models.py импортируется (...)

DO_NOTHING

Не предпринимать никаких действий. Если ваша база данных использует ссылочный целостности, это приведет к IntegrityError, если вы не добавите вручную SQL ON DELETE ограничение для поля базы данных.

...