class NewStock(models.Model):
stock_info = models.ForeignKey(Stock)
stock_xcode = models.CharField(max_length=10, unique=True, primary_key=True)
class Stock(models.Model):
stock_name = models.CharField(max_length=200)
stock_id = models.CharField(max_length=10, unique=True, primary_key=True)
В базе данных будет столбец stock_info_id
, а его тип - целое число.Когда stock_id
начинается с 0
, например 000001
, оно будет stock_info_id=1
и не сможет получить stock_info
, поскольку 1
не найдено в столбце stock_id
таблицы Stock
.
Как я могу указать точный тип для ForeignKey
.
Для этой проблемы все будет хорошо, если stock_info_id
будет CharField
отличным от Integer
.
Код перед изменением выглядит следующим образом.Я просто не установил stock_id
и stock_xcode
как primary key
.В этой ситуации stock_info_id
должно быть integer
.
class NewStock(models.Model):
stock_info = models.ForeignKey(Stock)
stock_xcode = models.CharField(max_length=10, unique=True)
class Stock(models.Model):
stock_name = models.CharField(max_length=200)
stock_id = models.CharField(max_length=10, unique=True)
После того, как я сделаю stock_id
как primary key
, makemigrations
и migrate
, stock_info_id
по-прежнему integer
.
Файл миграции находится здесь.
class Migration(migrations.Migration):
dependencies = [
('stockinfo', '0008_auto_20180519_1017'),
]
operations = [
migrations.RemoveField(
model_name='newstock',
name='id',
),
migrations.RemoveField(
model_name='stock',
name='id',
),
migrations.AlterField(
model_name='newstock',
name='stock_xcode',
field=models.CharField(max_length=10, primary_key=True, serialize=False, unique=True),
),
migrations.AlterField(
model_name='stock',
name='stock_id',
field=models.CharField(max_length=10, primary_key=True, serialize=False, unique=True),
),
]
Выбранная база данных - postgresql.Таблица newstock
.
name | type | Collation | Nullable | Default
---------------+--------------------------+-----------+----------+---------
stock_xcode | character varying(10) | | not null |
stock_info_id | integer | | not null |
Таблица stock
.
name | type | Collation | Nullable | Default
------------+------------------------+-----------+----------+---------
stock_name | character varying(200) | | not null |
stock_id | character varying(10) | | not null |