簡體   English   中英

DJANGO:當主鍵不是“id”時如何在夾具中指定主鍵

[英]DJANGO: How to specify primary key in fixture when the primary key is not “id”

我剛剛在 model 中更改了我的 pk 名稱。

這就是我的 model 的樣子:

class Course(LogsMixin, models.Model):
    """Definición del modelo de Proveedor."""
    name = models.CharField("Nombre del curso", null=False, default="", max_length=200)
    code = models.CharField("Código del curso", null=False, default="", max_length=50)
    hours = models.IntegerField(("Número de horas"), null=False, default=0)
    price = models.DecimalField(("Precio"), max_digits=6, decimal_places=2, null=False, default=0)
    provider = models.ForeignKey(Provider, verbose_name=("Proveedor"), null=True, default=None, on_delete=models.SET_DEFAULT)
    active = models.BooleanField("Activo", default=True)

如您所見,我沒有指定 PK,但我更改了:

class Course(LogsMixin, models.Model):
    """Definición del modelo de Proveedor."""
    reference = models.CharField("Referencia", primary_key=True, null=False, default="", max_length=50)
    name = models.CharField("Nombre del curso", null=False, default="", max_length=200)
    code = models.CharField("Código del curso", null=False, default="", max_length=50)
    hours = models.IntegerField(("Número de horas"), null=False, default=0)
    price = models.DecimalField(("Precio"), max_digits=6, decimal_places=2, null=False, default=0)
    provider = models.ForeignKey(Provider, verbose_name=("Proveedor"), null=True, default=None, on_delete=models.SET_DEFAULT)
    active = models.BooleanField("Activo", default=True)

正如您現在所看到的,“參考”是我的 pk 但是當我嘗試安裝此夾具時:

[{
        "models": "consumptions.course",
        "pk": "AD_ADGD008PO",
        "fields": {
            "name": "ANÁLISIS DE PROBLEMAS Y TOMA DE DECISIONES",
            "code": "ADGD008PO",
            "price": "21.00",
            "hours": "30",
            "provider": "P000019",
            "active": true
        }
    },

我收到下一個錯誤:

Traceback (most recent call last):
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\serializers\json.py", line 69, in Deserializer
    yield from PythonDeserializer(objects, **options)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\serializers\python.py", line 92, in Deserializer
    Model = _get_model(d["model"])
KeyError: 'model'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 20, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\commands\loaddata.py", line 72, in handle
    self.loaddata(fixture_labels)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\commands\loaddata.py", line 114, in loaddata
    self.load_label(fixture_label)
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\management\commands\loaddata.py", line 172, in load_label
    for obj in objects:
  File "C:\Users\aquesada\.virtualenvs\AVC-dSHgJ7e5\lib\site-packages\django\core\serializers\json.py", line 73, in Deserializer
    raise DeserializationError() from exc
django.core.serializers.base.DeserializationError: Problem installing fixture 'C:\Users\aquesada\Desktop\Proyectos\AVC\consumptions\fixtures\courses.json':

為什么會這樣?

在您的示例中,您在夾具鍵中使用復數“模型”而不是“模型”。

"models": "consumptions.course",

應該:

"model": "consumptions.course",

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM