【问题标题】:Django Saving ForeignKey as Character instead of Integer FieldDjango 将 ForeignKey 保存为字符而不是整数字段
【发布时间】:2020-11-30 07:09:30
【问题描述】:

我有两个模型。其中一个模型有一个 pk 唯一标识字符串。有时会是“TTL123”,有时是“000010”。由于某种原因,当我创建外键字段时使用整数并且项目“000010”显示为 10。我无法保存“TTL123”。为什么 django 将表创建为整数而不是字符字段?我该如何改变它?我一直在查看文档,但找不到答案。

class Item(models.Model):
    item_id = models.CharField(max_length=255, primary_key=True)
    # ... other fields...


class ItemRestriction(models.Model):
    item = models.ForeignKey(Item, related_name='item', on_delete=models.PROTECT, blank=True, null=True)

如何使 ForeignKey 使用字符字段而不是整数?现在,当我尝试访问 item__item_id 时,我什么也得不到,因为它在 Item 表中是 000010,在 ItemRestriction 上是 10。我不明白它为什么这样做。

【问题讨论】:

标签: django postgresql django-models


【解决方案1】:

您可以使用to_field

class ItemRestriction(models.Model):
    item = models.ForeignKey(Item, related_name='item', to_field='item_id', on_delete=models.PROTECT, blank=True, null=True)

见:https://docs.djangoproject.com/en/3.0/ref/models/fields/#django.db.models.ForeignKey.to_field

如果可能,您可能需要考虑使用AutoField 或某种处理unique=True 并在创建时自动递增的字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2011-06-23
    • 1970-01-01
    • 2019-08-04
    • 2018-09-03
    相关资源
    最近更新 更多