在makemigrations文件中忽略了与to_字段和db_列的Django OneToOneField关系

2024-04-25 17:16:11 发布

您现在位置:Python中文网/ 问答频道 /正文

即使在阅读了关于db_columnDjango' recomendations的文档之后,我仍然无法使用此功能实现所需的结果。在

在 这是我代码的一部分

class DefaultBaseModel(models.Model):
    slug = models.SlugField(primary_key=True, 
                            unique=True, 
                            null=False, 
                            blank=False)

class Bill(DefaultBaseModel):

class Payment(DefaultBaseModel):
    bill = models.OneToOneField(Bill, 
                                related_name='payments', 
                                on_delete=models.CASCADE,
                                to_field='slug', 
                                db_column='bill_slug')

在 我希望在Django的shell上执行以下操作:

^{pr2}$

在 但是我得到了一个错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Payment' object has no attribute 'bill_slug'

p.bill_id

给了我slug值,但它仍在创建后缀为\u id的列

  • 我试图删除makemigrations(migrate)文件(那些初始.py和其他人)和创造它
  • 从Sqlite迁移到Postgres
  • 查看了Django的makemigrations文件,db_ngucolumn='bill\u slug'就在那里。在

有什么想法吗?在


Tags: 文件djangoidfalsetruedbmodelscolumn
1条回答
网友
1楼 · 发布于 2024-04-25 17:16:11

没有什么叫“branch_slug”的是吗?一个Bill有一个slug。在您的示例代码中,我没有看到branch任何地方。尽量减少列名和表名的冗长程度,看看是否有效:

class DefaultBaseModel(models.Model):
    slug = models.SlugField(unique=True,)

    class Meta:
        abstract = True

class Bill(DefaultBaseModel):

class Payment(DefaultBaseModel):
    bill = models.OneToOneField(Bill, on_delete=models.CASCADE,)

现在这应该行得通:

^{pr2}$

相关问题 更多 >