相关疑难解决方法(0)

你见过的最糟糕的Django练习

你注意到使用Django框架的最大错误是什么?您是否看到过一些真正的误用,可能应该作为对Django文档的警告?

python django

23
推荐指数
7
解决办法
2322
查看次数

如何从自定义主键迁移到默认ID

我创建了一个带有电子邮件地址的模型作为自定义主键,如下所示:

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数据库.

  1. 我刚刚用unique = True替换了primary_key = True选项.python manage.py makemigrations抱怨:

您试图在没有默认值的情况下向用户添加不可为空的字段"id"; 我们不能那样做(数据库需要一些东西来填充现有的行).

如果我指定0为默认值,则python manage.py migrate失败django.db.utils.IntegrityError: UNIQUE constraint failed: login_user.id

  1. 根据此帖子将主键字段更改为唯一字段,我尝试手动添加自动字段,如下所示:

    id = models.AutoField()

现在python manage.py makemigrations失败了:

login.User.id: (fields.E100) AutoFields must set primary_key=True.
Run Code Online (Sandbox Code Playgroud)

如果我按照错误消息的建议执行操作,我会遇到与第一次尝试时相同的问题:缺少默认值.

  1. 我试图创建一个字段id = IntegerField(unique = True)(遵循https://docs.djangoproject.com/en/1.10/howto/writing-migrations/#migrations-that-add-unique-fields上的 Django文档)然后将字段类型更改为AutoField(primary_key = True).同时,我需要将email字段更改为unique = True以避免使用两个主键.在这些更改之后, makemigrations工作正常但migrate失败并带有回溯和此错误:django.db.utils.OperationalError: duplicate column name: id 它似乎正在尝试创建一个额外的"id"列,不知道为什么.

这样做的正确方法是什么?此外,如果成功,是否会正确更新引用我的用户的ForeignKey字段?

django django-models

11
推荐指数
2
解决办法
3330
查看次数

在django admin中保存对象时出现unicode错误

在我的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)

python django unicode django-admin

3
推荐指数
1
解决办法
5866
查看次数

Django IntegrityError 更改外键

我有一个通过以下方式LucyGuide扩展 DjangoUser模型的模型OneToOneField

class LucyGuide(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

还有一个Company它有一个名为场模型lucy_guide是一种ForeignKeyUser模型:

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 …

python database django postgresql

1
推荐指数
1
解决办法
2994
查看次数