你注意到使用Django框架的最大错误是什么?您是否看到过一些真正的误用,可能应该作为对Django文档的警告?
我创建了一个带有电子邮件地址的模型作为自定义主键,如下所示:
email = models.EmailField(max_length=255, primary_key=True,)
Run Code Online (Sandbox Code Playgroud)
现在我意识到在我的情况下这不是一个好主意,我想回到自动生成的id字段作为主键.
这该怎么做?我以不同的方式尝试了这一点,但都失败了.我正在使用带有Python 3.4.3的Django 1.10.4和一个SQLite数据库.
python manage.py makemigrations抱怨:您试图在没有默认值的情况下向用户添加不可为空的字段"id"; 我们不能那样做(数据库需要一些东西来填充现有的行).
如果我指定0为默认值,则python manage.py migrate失败django.db.utils.IntegrityError: UNIQUE constraint failed: login_user.id
根据此帖子将主键字段更改为唯一字段,我尝试手动添加自动字段,如下所示:
id = models.AutoField()
现在python manage.py makemigrations失败了:
login.User.id: (fields.E100) AutoFields must set primary_key=True.
Run Code Online (Sandbox Code Playgroud)
如果我按照错误消息的建议执行操作,我会遇到与第一次尝试时相同的问题:缺少默认值.
makemigrations工作正常但migrate失败并带有回溯和此错误:django.db.utils.OperationalError: duplicate column name: id 它似乎正在尝试创建一个额外的"id"列,不知道为什么.这样做的正确方法是什么?此外,如果成功,是否会正确更新引用我的用户的ForeignKey字段?
在我的django应用程序中,我有一些对象导致django管理员中的相应URL为非ascii.(例如:http://mysite/admin/myapp/myclass/Présentation/)
我可以编辑对象没有任何问题,但当我保存它时,我有以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 24: ordinal not in range(128), HTTP response headers must be in US-ASCII format
奇怪的是,对象被正确保存到数据库中.
有谁知道Django管理员如何管理unicode?任何有助于解决此问题的信息,指针或想法将不胜感激.
提前致谢
更新:这是模型的代码
class Plugin(models.Model):
"""Some subcontent that can be added to a given page"""
class Meta:
ordering = ['ordering']
name = models.CharField(max_length=32, primary_key=True)
div_id = models.CharField(default='rightcol', max_length=32)
published = models.BooleanField(default=True,
help_text=_("If this is not checked, it is not displayed on the page."))
ordering = models.IntegerField(default=1,
help_text=_("plugins are sorted with this number in …Run Code Online (Sandbox Code Playgroud) 我有一个通过以下方式LucyGuide扩展 DjangoUser模型的模型OneToOneField:
class LucyGuide(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
还有一个Company它有一个名为场模型lucy_guide是一种ForeignKey对User模型:
class Company(models.Model):
lucy_guide = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
我想把它改成
class Company(models.Model):
lucy_guide = models.ForeignKey(LucyGuide)
Run Code Online (Sandbox Code Playgroud)
但是,当我实施此更改并进行并运行迁移时,我遇到了IntegrityError:
django.db.utils.IntegrityError: insert or update on table "lucy_web_company" violates foreign key constraint "lucy_web_company_lucy_guide_id_de643702_fk_lucy_web_"
DETAIL: Key (lucy_guide_id)=(461) is not present in table "lucy_web_lucyguide".
Run Code Online (Sandbox Code Playgroud)
这个问题类似于IntegrityError Insert or update on table "orders_order" wrongs Foreign key constraint ";似乎我在将LucyGuide对象引用为外键之前已经创建了对象。
解决此问题的最佳方法是什么?是否需要在 shell 中编写一系列命令来创建这些用户?
更新
在 shell …