Django不生成primary_key [英] Django don't generate primary_key

查看:54
本文介绍了Django不生成primary_key的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我手动编写迁移以快速添加到新环境中.当我尝试创建Operator模型的新对象时,出现有关空ID的错误.我试图在meta和伪造的 Operator 模型中设置 managed = False ,但是这些都没有带来结果.我的代码有什么问题?

I write the migration manually to quickly add to the new environment. When I try to create a new object of the Operator model I get an error about an empty id. I tried to set managed = False in meta and fake Operator model but none of this brought results. What's wrong with my code?

我的模特:

class Operator(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=256)

    class Meta:
        db_table = '"mts_market"."operator"'
        managed = False

    def __str__(self):
        return self.name

我的迁移:

from django.db import migrations


def forwards_func(apps, schema_editor):
    product = apps.get_model("landings", "Product")
    merchant = apps.get_model("landings", "Merchant")
    partner = apps.get_model("landings", "Partner")
    operator = apps.get_model("landings", "Operator")
    tariff = apps.get_model("landings", "Tariff")
    db_alias = schema_editor.connection.alias
    partner = partner.objects.using(db_alias).get(name="binding")
    merchant = merchant.objects.using(db_alias).get(name="dc")
    operator.objects.using(db_alias).bulk_create([
        operator(name="test")
    ])
    operator = operator.objects.using(db_alias).get(name="test")
    product.objects.using(db_alias).bulk_create([
        product(name="mirrorcheck", merchant=merchant,
                mnp_service_name_card="test",
                partner=partner,
                operator=operator,
                sub_service_name_card="test",
                has_many_subs=True, category='retail',
    ])
    product = product.objects.using(db_alias).get(name="mirrorcheck",
                                                  partner=partner.id, merchant=merchant.id, operator=operator.id)
    tariff.objects.using(db_alias).bulk_create([
        tariff(name='card_subscription', value=100,
        product=product, mnp_instance_details={},
               sub_instance_details={"amount": 29900},
               )
    ])
    partner = partner.objects.using(db_alias).get(name="upfront")
    product.objects.using(db_alias).bulk_create([
        product(name="mirrorcheck", merchant=merchant,
                mnp_service_name_card="test",
                partner=partner,
                operator=operator,
                sub_service_name_card="zenit_bank_test",
                has_many_subs=True, category='retail',
    ])
    product = product.objects.using(db_alias).get(name="mirrorcheck",
                                                  partner=partner.id, merchant=merchant.id, operator=operator.id)
    tariff.objects.using(db_alias).bulk_create([
        tariff(name='card_subscription', value=29900,
               product=product, mnp_instance_details={},
               sub_instance_details={"amount": 29900},
               )
    ])


def reverse_func(apps, schema_editor):
    operator = apps.get_model("landings", "Operator")
    product = apps.get_model("landings", "Product")
    tariff = apps.get_model("landings", "Tariff")
    partner = apps.get_model("landings", "Partner")
    db_alias = schema_editor.connection.alias
    partner = partner.objects.using(db_alias).get(name="binding")
    operator = operator.objects.using(db_alias).get(name="test")
    product = product.objects.using(db_alias).get(name="mirrorcheck", operator=operator.id, partner=partner.id)
    tariff.objects.using(db_alias).get(name="card_subscription", product=product.id).delete()
    product.delete()
    partner = partner.objects.using(db_alias).get(name="upfront")
    product = product.objects.using(db_alias).get(name="mirrorcheck", operator=operator.id, partner=partner.id)
    tariff.objects.using(db_alias).get(name="card_subscription", product=product.id).delete()
    product.delete()
    operator.delete()


class Migration(migrations.Migration):
    dependencies = [('landings', '0026_product_operator')]

    operations = [
        migrations.RunPython(forwards_func, reverse_func),
    ]

错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
psycopg2.IntegrityError: ОШИБКА:  нулевое значение в столбце "id" нарушает ограничение NOT NULL
DETAIL:  Ошибочная строка содержит (null, test).

推荐答案

id 是默认模型PK,因此您无需显式定义它.

id is the default model PK so you don't need to define it explicitly.

如果您仍然想自己定义它,请将其设为自动字段,而不是 IntegerField .

If you still want to define it yourself, make it AutoField instead of IntegerField.

这篇关于Django不生成primary_key的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆