gpt4 book ai didi

python - 将现有模型迁移到 Django 内置用户模型

转载 作者:太空狗 更新时间:2023-10-30 02:12:38 25 4
gpt4 key购买 nike

我正在运行 Django 1.4.2 项目。我有一个 User(models.Model) 类的数据库,现在想更改它以便我使用 django.contrib.auth.models 中的内置模型 User。我可以简单地使用我现有的代码并简单地使我自己的自定义用户模型成为 Django 内置模型的子类吗?这是现在的模型。

class User(models.Model):
u_id = models.AutoField(primary_key=True)
#password = models.CharField(max_length=765)
old_password = models.CharField(max_length=765, null=True, blank=True)
birthday = models.DateField(null=True, blank=True)
school_year = models.CharField(max_length=765, blank=True)
gender = models.CharField(max_length=18, blank=True)
#email = models.CharField(max_length=765, blank=True)
profile_pic = models.CharField(max_length=765, blank=True)
is_cloudinary_pic = models.BooleanField(default=False)
fb_id = models.CharField(max_length=765, blank=True)
phone_num = models.CharField(max_length=765, blank=True)
name = models.CharField(max_length=765, blank=True)
confirmcode = models.CharField(max_length=765, blank=True)
status = models.CharField(max_length=765, blank=True)
netid = models.CharField(max_length=765, blank=True)
favorites = models.ManyToManyField('listings.Listing', blank=True, related_name='favorites')
stripe = models.CharField(max_length=765, blank=True)
rating = models.IntegerField(null=True, blank=True)
preferences = models.CharField(max_length=765, blank=True)
b_notification = models.CharField(max_length=765, blank=True)
l_notification = models.CharField(max_length=765, blank=True)
address = models.CharField(max_length=765, blank=True)
city = models.CharField(max_length=765, blank=True)
state = models.CharField(max_length=6, blank=True)
zip = models.CharField(max_length=15, blank=True)
emailprefs = models.CharField(max_length=30, blank=True)
exp_month = models.CharField(max_length=6, blank=True)
exp_year = models.CharField(max_length=12, blank=True)
last4 = models.CharField(max_length=12, blank=True)
c_type = models.CharField(max_length=765, blank=True)
user_type = models.CharField(max_length=10, blank=True)
contract = models.ForeignKey('contracts.Contract', null=True,blank=True, default=None, on_delete=models.SET_NULL)
last_listing_booked = models.ForeignKey('listings.Listing', null=True,blank=True, default=None, on_delete=models.SET_NULL, related_name='last_listing_booked')
last_locked_on = models.IntegerField(null=True, blank=True)
waitlist_number = models.IntegerField(null=True, blank=True)
waitlist_listing = models.ForeignKey('listings.Listing', null=True, blank=True, on_delete=models.SET_NULL, related_name='waitlist_listing')
uploaded_contract = models.FileField(upload_to=contract_file_name, max_length=765, null=True, blank=True, default=None, storage=FileSystemStorage(location=os.path.join(MEDIA_ROOT, 'contracts')))

当我在将我的模型设为 Django 用户模型的子类后尝试使用 Django South 进行迁移时,我被要求为 user_ptr 设置一个值,我没有找到关于该字段的任何信息。

一般来说,以这种方式简单地进行子类化是不安全的吗?我不能失去所有我已经拥有的用户数据并重新开始。请注意,密码和电子邮件字段已被注释掉,因为它们与这些字段的 Django 版本冲突。

最佳答案

如果可以选择升级到 Django 1.5,您可以简单地 use your own User model , 只要它提供所有必填字段。

user_ptr 是一个隐式 OneToOne 模型,它将您的对象与您派生的类相关联。执行此操作的最简单方法可能是在以下步骤中手动创建迁移:

  1. 添加 user_ptr 字段 WITH null=True

  2. 迭代所有用户对象并创建相应的 auth.User 对象。如果您不确定如何执行此操作,可以阅读 section on data migrations在南方文档中。

  3. 不允许空 user_ptr 字段

如果您使用的散列方案与 Django 的内置方法不兼容,您可能需要做的另一件事是实现您自己的密码散列器。这不是很难做到,并且在 another question 中得到解决。 .

关于python - 将现有模型迁移到 Django 内置用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com