【问题标题】:django RelatedObjectDoesNotExist error while creating创建时出现 django RelatedObjectDoesNotExist 错误
【发布时间】:2021-07-24 13:59:05
【问题描述】:

型号:

    class FullNameMixin(models.Model):
        name_id    = models.BigAutoField(primary_key = True, unique=False, default=None, blank=True)
        first_name = models.CharField(max_length=255, default=None, null=True)
        last_name  = models.CharField(max_length=255, default=None, null=True)


        class Meta:
            abstract = True

        class Meta:
            db_table = 'fullname'


    class User(FullNameMixin):
        id        = models.BigAutoField(primary_key = True)
        username  = models.CharField(max_length=255, unique=True)
        email     = models.CharField(max_length=255, unique=True)
        token     = models.CharField(max_length=255, unique=True, null=True, blank=True)
        password  = models.CharField(max_length=255)
        role      = models.IntegerField(default=1)
        verified  = models.BooleanField(default=False)
        created_at  = models.DateTimeField(auto_now_add=True, null=True, blank=True)
        updated_at  = models.DateTimeField(auto_now=True, null=True, blank=True)

        def __str__(self):
            return self.username    

        class Meta:
            db_table = 'cga_user'


    class Profile(FullNameMixin):
        id                  = models.BigAutoField(primary_key = True)
        birthday            = models.DateTimeField(null=True, blank=True)
        country             = models.CharField(max_length=255, null=True, blank=True)
        state               = models.CharField(max_length=255, null=True, blank=True)
        postcode            = models.CharField(max_length=255, null=True, blank=True)
        phone               = models.CharField(max_length=255, null=True, blank=True)
        profession_headline = models.CharField(max_length=255, null=True, blank=True)
        image               = models.ImageField(upload_to=get_upload_path, null=True, blank=True)
        profile_banner      = models.ImageField(upload_to=get_upload_path_banner, null=True, blank=True)
        cga_user            = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, related_name="profile")
        gender              = models.CharField(
                                max_length=255, blank=True, default="", choices=USER_GENDER_CHOICES
                            )
        created_at  = models.DateTimeField(auto_now_add=True, null=True, blank=True)
        updated_at  = models.DateTimeField(auto_now=True, null=True, blank=True)

        class Meta:
            db_table = 'profile'

当我从 django 管理面板创建配置文件时出现以下错误。

    e
        filename = self.upload_to(instance, filename)
    File "/Users/soubhagyapradhan/Desktop/upwork/africa/backend/api/model_utils/utils.py", line 7, in get_upload_path
        instance.user,
    File "/Users/soubhagyapradhan/Desktop/upwork/africa/backend/env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 421, in __get__
        raise self.RelatedObjectDoesNotExist(
    api.models.FullNameMixin.user.RelatedObjectDoesNotExist: Profile has no user.
    [24/Jul/2021 13:49:51] "POST /admin/api/profile/add/ HTTP/1.1" 500 199997

请看看我该如何解决这个问题。 注意:用户模型创建工作,但配置文件不工作

我检查了 drf 和 django 管理面板。 两个地方都不工作。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    这里的问题是你声明了一个实际上只是一个模型的用户模型。这不是它的工作原理。 User 是一种特殊类型的模型,如果你想改变它,你必须扩展 AbstractUser 类。 或者,您可以通过经典用户配置文件方法中的一对一课程连接到它。

    但是在这里,您正在创建一个用户模型(除了使用保留字“用户”之外)没有任何必要的要求,可以被视为可以通过身份验证并且可以实例化会话的用户。

    > Example of a simple user-profiles architecture

    > Working with User objects - Django Docs(我特别推荐这个)

    我建议您阅读 django 用户身份验证。

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多