我正在创建一个填充脚本,从 MysqlDatabase 到 Django 模型。
我循环遍历从 Mysql 接收的数据,一切顺利。
现在我必须将其写入 Django 数据库...
mdl, succeeded = models.User.objects.get_or_create(
name=name,
password=password,
email=email
)
我正在打印succeeded
,这样我就可以看到反馈是什么,但它给我的只是False
我的 Django 模型用户
已编辑,因此所有字段都可以空白
并允许NULL
或具有默认值
我的模型用户
:
username = models.CharField(max_length=20, blank=True, null=True)
slug = models.SlugField(null=True, blank=True)
email = models.EmailField(unique=True, null=True)
name = models.CharField("First and last name", max_length=100)
uses_metric = models.BooleanField(default=True)
position = models.CharField("Position", max_length=70, blank=True, null=True,)
utility = models.ForeignKey(Utility, default=1, blank=True, null=True)
supplier = models.ForeignKey(Supplier, default=1, blank=True, null=True)
currency = models.ForeignKey(Currency, default=1)
phone = models.CharField("Direct phone number", max_length=40, blank=True, default='+')
gets_notifications_on_reply = models.BooleanField("Receive notifications", default=False)
memberlist = models.BooleanField("Show member in memberslist", default=True)
registration_date = models.IntegerField(default=floor(time.time()), blank=True, null=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Deselect this instead of deleting accounts.'
),
)
USERNAME_FIELD = 'email'
最佳答案
请检查您的数据库。这意味着您从那里查询的 User 对象已经存在。这可能是由于对象已经存在,或者您的代码未使用正确的数据库。由于迁移,经常使用多个数据库,这也可能是一个问题。
According to the Django documentation , get_or_create()
不返回对象和状态 succeeded
而是一个标志 created
,指示该对象是新创建的还是已存在于数据库中。如果它已经存在,则 created
标志(代码中的 succeeded
)是 False
.
如果您想确保错误不是由已存在的对象引起的,请获取 created
的一个数据对。为 false 并尝试使用模型的 get()
检索它方法。如果这抛出 DoesNotExist
错误,那么问题就出在别的地方了。如果它返回一个对象,则该对象已经存在。
关于python - Django get_or_create 返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47549788/