簡體   English   中英

IntegrityError(1452,'無法添加或更新子行:外鍵約束失敗)

[英]IntegrityError (1452, 'Cannot add or update a child row: a foreign key constraint fails)

我正在使用自定義用戶 model (遵循教程)並且一切正常。

當我使用我在 /admin session 中使用 createsuperuser 創建的管理員用戶登錄時,我可以添加/刪除/編輯任何我想要的東西。

當我使用其他用戶登錄時,我已授予員工和管理員權限,每當我想向數據庫添加一些內容時,我都會收到此錯誤:

IntegrityError at /admin/users/user/13/change/ (or whichever action I'm doing)

(1452, 'Cannot add or update a child row: a foreign key constraint fails (`NMS_database`.`django_admin_log`, CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')

[...]Exception Location:    /home/me/python_ve/lib/python3.8/site-packages/MySQLdb/connections.py in query, line 239

這是我的用戶 model:

class User(AbstractBaseUser):
    email = models.EmailField(verbose_name="email", unique=True, max_length=255)
    first_name = models.CharField(max_length=30, blank=True, null=True)
    surname = models.CharField(max_length=30, blank=True, null=True)

    additional = models.BooleanField(default=False)

    individual = models.BooleanField(default=True)
    active = models.BooleanField(default=True) #can they login?
    staff = models.BooleanField(default=False) #staff user non superuser
    admin = models.BooleanField(default=False) #superuser
    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email' # default identifier for that user which will used for logging in

    #email (USERNAME_FIELD in this case) and password are required by default

    REQUIRED_FIELDS = ['first_name', 'surname']

    def __str__(self):
        return "%s %s" % (self.first_name, self.surname)

    def get_full_name(self):
        return self.first_name

    def has_perm(self, perm, obj=None):
        return self.admin

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.staff

    @property
    def is_admin(self):
        return self.admin


# hook in the New Manager to our Model
    objects = UserManager()

如何讓不是超級管理員的用戶真正能夠在 /admin 中執行操作?

這是由於關於自定義用戶模型的一般觀點,即它們不能在中途引入。

具體來說,我的模型使用表users_user來存儲有關新添加用戶的詳細信息,並使用表auth_user來添加鏈接到我在數據庫中的其他模型的外鍵。 事實上,我將用戶詳細信息從users_user表復制粘貼到auth_user表(因此有重復)的臨時解決方法解決了問題(即沒有返回任何錯誤)。

這里的“簡單”解決方案是完全刪除數據庫並重新創建它。 就我而言,我發現的其他解決方案(例如this )沒有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM