【问题标题】:TypeError in models模型中的类型错误
【发布时间】:2023-04-03 22:02:01
【问题描述】:

我收到此错误:

用户 = 模型.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

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    如错误所示,您需要通过on_delete= parameter [Django-doc] 指定在您引用的对象已删除的情况下应该发生什么。例如:

    class UserProfileInfo(models.Model):
    
        # creating relationship
        user = models.OneToOneField(User, on_delete=models.CASCADE)
    
        # 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为空;这只有在 nullTrue 时才有可能。

    SET_DEFAULT

    ForeignKey 设置为其default 值;的默认值 ForeignKey 必须设置。

    SET()

    ForeignKey 设置为传递给SET() 的值,或者如果是可调用的 传入,调用它的结果。在大多数情况下,通过 callable 将是必要的,以避免在您的时间执行查询 models.py 已导入 (...)

    DO_NOTHING

    不采取任何行动。如果您的数据库后端强制引用 完整性,这将导致 IntegrityError 除非您手动添加 对数据库字段的SQL ON DELETE 约束。

    【讨论】:

      【解决方案2】:

      这里回答了类似的问题Getting TypeError: __init__() missing 1 required positional argument: 'on_delete' when trying to add parent table after child table with entries

      基本上以下应该解决url问题

      从 Django 2.0 on_delete 是必需的:

      user = models.OneToOneField(User, on_delete=models.CASCADE)
      

      【讨论】:

        【解决方案3】:

        在构造函数中放入'on_delete = models.CASCADE'

        它的作用:当您在模型的用户字段中引用它时删除用户对象。它还将删除特定用户的 UserProfileInfo 的模型对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-04
          • 1970-01-01
          • 2023-03-25
          • 2014-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多