TypeError 가져오기: __init_() 항목이 있는 하위 테이블 뒤에 상위 테이블을 추가할 때 필요한 위치 인수 'on_delete'가 하나 누락되었습니다.
내 sqlite 데이터베이스에 두 개의 클래스가 있는데, 이름이 다음과 같은 부모 테이블입니다.Categorie그리고 아이 테이블은.Article먼저 하위 테이블 클래스를 만들고 항목을 추가합니다.그래서 저는 처음에 이것을 가졌습니다.
class Article(models.Model):
titre=models.CharField(max_length=100)
auteur=models.CharField(max_length=42)
contenu=models.TextField(null=True)
date=models.DateTimeField(
auto_now_add=True,
auto_now=False,
verbose_name="Date de parution"
)
def __str__(self):
return self.titre
그리고 부모 테이블을 추가한 후에, 그리고 지금 나의models.py다음과 같이 표시됩니다.
from django.db import models
# Create your models here.
class Categorie(models.Model):
nom = models.CharField(max_length=30)
def __str__(self):
return self.nom
class Article(models.Model):
titre=models.CharField(max_length=100)
auteur=models.CharField(max_length=42)
contenu=models.TextField(null=True)
date=models.DateTimeField(
auto_now_add=True,
auto_now=False,
verbose_name="Date de parution"
)
categorie = models.ForeignKey('Categorie')
def __str__(self):
return self.titre
그래서 내가 달릴 때python manage.py makemigrations <my_app_name>다음 오류가 발생했습니다.
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\core\management\__init__.py", line 354, in execute_from_command_line
utility.execute()
File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\core\management\__init__.py", line 330, in execute
django.setup()
File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\apps\registry.py", line 112, in populate
app_config.import_models()
File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\apps\config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 665, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "C:\Users\lislis\Django\mon_site\blog\models.py", line 6, in <module>
class Article(models.Model):
File "C:\Users\lislis\Django\mon_site\blog\models.py", line 16, in Article
categorie = models.ForeignKey('Categorie')
TypeError: __init__() missing 1 required positional argument: 'on_delete'
스택 오버플로에서 유사한 문제를 몇 가지 보았지만 동일한 문제는 아닌 것 같습니다. __init__() 필수 위치 인수 1개 누락: 'quantity'
속성을 변경할 수 있습니다.categorie동급의Article다음과 같이:
categorie = models.ForeignKey(
'Categorie',
on_delete=models.CASCADE,
)
오류가 사라져야 합니다.
결국 다음을 위한 다른 옵션이 필요할 수 있습니다.on_delete자세한 내용은 설명서를 참조하십시오.
당신이 코멘트에서 언급했듯이, 당신은 특별한 요구사항이 없습니다.on_delete당신은 그 옵션을 사용할 수 있습니다.DO_NOTHING:
# ...
on_delete=models.DO_NOTHING,
# ...
Django 2.x 이후로,on_delete필수 항목입니다.
Django 2.0에서는 버전 1.9: on_delete 이후로 사용되지 않습니다.이전 버전에서는 기본적으로 CASCADE로 설정됩니다.
Django 2.0 이후 ForeignKey 필드에는 두 가지 위치 인수가 필요합니다.
- 지도에 표시할 모델
- on_delete 인수
categorie = models.ForeignKey('Categorie', on_delete=models.PROTECT)
on_delete에서 사용할 수 있는 몇 가지 방법은 다음과 같습니다.
- 캐스케이드
계단식 삭제.Django는 DELETE CASCADE에서 SQL 제약 조건의 동작을 에뮬레이트하고 ForeignKey가 포함된 개체를 삭제합니다.
- 보호하다
django.db의 하위 클래스인 ProtectedError를 올려 참조된 개체를 삭제하지 않도록 합니다.무결성 오류입니다.
- 아무것도 하지 않음
아무 조치도 취하지 않습니다.데이터베이스 백엔드에서 참조 무결성을 적용하는 경우 데이터베이스 필드에 SQL ON DELETE 제약 조건을 수동으로 추가하지 않으면 무결성 오류가 발생합니다.
on_delete에 대한 자세한 내용은 설명서를 참조하십시오.
Django 2.0에서on_delete필수 항목:
사용자 = 모델.OneToOneField(사용자, on_delete=가 필요합니다.캐스케이드)
사용자가 삭제되면 하위 테이블 데이터가 삭제됩니다.자세한 내용은 장고 설명서를 참조하십시오.
외부 키를 사용하는 경우 "on_delete="를 사용해야 합니다."CASCADE"는 부모 테이블에서 원래 요소를 삭제한 후 개발된 복잡성을 제거할 것이기 때문입니다.그것처럼 간단해.
categorie = models.ForeignKey('Categorie', on_delete=models.CASCADE)
버전 1.9, 장고버전 1.9,
on_deleteDjango 2.0부터 필수 인수가 되었습니다.
이전 버전에서는 기본적으로 CASCADE로 설정됩니다.
이전 버전에서 사용한 기능을 복제하려는 경우다음 인수를 사용합니다.
categorie = models.ForeignKey('Categorie', on_delete = models.CASCADE)
이는 명시적으로 지정하지 않고 이전 버전과 동일한 효과를 제공합니다.
on_delete와 함께 사용되는 다른 인수에 대한 공식 문서
다음은 on_delete에 대해 도움이 되는 사용 가능한 옵션입니다.
캐스케이드, DO_NOTHING, PROTECT, SET_DEFAULT, SET_NULL
어떤 옵션을 입력해야 할지 모르는 경우.다음과 같은 기본값을 유지하기를 원합니다.on_delete=None마이그레이션 전:
on_delete=hostname에 있습니다.캐스케이드
다음은 이전 버전의 코드 조각입니다.
if on_delete is None:
warnings.warn(
"on_delete will be a required arg for %s in Django 2.0. Set "
"it to models.CASCADE on models and in existing migrations "
"if you want to maintain the current default behavior. "
"See https://docs.djangoproject.com/en/%s/ref/models/fields/"
"#django.db.models.ForeignKey.on_delete" % (
self.__class__.__name__,
get_docs_version(),
),
RemovedInDjango20Warning, 2)
on_delete = CASCADE
"어쨌든.외부 키()" 및 "모델".장고 2.0 이후 OneToOneField는 "on_delete"여야 합니다.아래의 예:
"어쨌든.외부 키():
categories = models.ForeignKey('Category', on_delete=models.CASCADE)
"어쨌든.일대일 필드":
categories = models.OneToOneField('Category', on_delete=models.PROTECT)
ForeignKey에 null=True, on_delete=message 두 매개 변수를 모두 추가하여 해결한 유사한 문제가 있습니다.SET_NULL
나에게 패키지 관리자는 해결했습니다.djangorestframework과 더그버로리고으전은낮▁a▁to.authtoken모델에 on_delete가 없습니다.제 모델들은 모두 좋았습니다.실행할 수 있습니다.django.apps.apps.get_models()모든 모델 목록을 가져와 어떤 라이브러리가 자체 모델을 생성하는지 확인하고 문제가 될 수 있습니다.
이것은 나에게 효과가 있었습니다.pip install django-csvimport --upgrade
언급URL : https://stackoverflow.com/questions/44026548/getting-typeerror-init-missing-1-required-positional-argument-on-delete
'programing' 카테고리의 다른 글
| 마지막 커밋을 실행 취소하는 방법 (0) | 2023.05.04 |
|---|---|
| 배열의 첫 번째 항목에서 일치하도록 MongoDB 쿼리 (0) | 2023.05.04 |
| Objective-C에서 -init 메서드를 비공개로 할 수 있습니까? (0) | 2023.05.04 |
| 컨테이너에 있는 Azure blob 파일의 이름 목록을 가져오는 중? (0) | 2023.05.04 |
| Python 3.8 이전에 괄호 없이 반환문에서 별표로 표시된 압축 풀기가 잘못된 구문인 이유는 무엇입니까? (0) | 2023.05.04 |