65

让我对 Django 固定装置感到困扰的一件事是,您必须指定每个模型的主键。有什么方法可以创建固定装置而不必为每一行指定主键?

4

5 回答 5

97

使用“pk: null”而不是“pk: 1”(或其他),这将导致 PK 设置为 None,并且在保存对象时将分配一个主键。

这至少适用于 YAML,如果您是手动创建的,我猜您正在使用它。

于 2009-10-01T16:40:23.337 回答
13

如果你想在不使用 pk 的情况下添加关系,你应该看看 Natural Keys

https://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-app-label-app-label-app-label-model

于 2011-01-23T19:27:45.450 回答
1

如果您查看 manage.py dumpdata 命令,您将看到一些名为 --natural-foreign、--natural-primary 的选项。如果您查看输出,您可以看到对象在没有使用主键或外键的情况下被转储。

于 2016-07-14T08:28:45.787 回答
0

我的一个朋友推荐了这个fixture模块: http: //farmdev.com/projects/fixture/

于 2009-10-01T15:11:16.080 回答
0

我必须处理现有的数据库模式而无法更改它,所以我需要一个具有复杂主键或根本没有它的表 - 但不需要串行表。我做了什么:

我已经为该字段指定了一个 primary_key=True ,它根本不应该是唯一的,并编写了重载方法:

class ContraIndicationsMedicines(models.Model):

    contra_indication = models.ForeignKey(ContraIndication, primary_key=True)
    medicine = models.ForeignKey(Medicine)

    def validate_unique(self, exclude=None): 
        pass

事实上,它满足了我的需要,但是在 django.contib.admin.* 中有更多的验证调用,并不是所有的内联等都可以保证工作。这是我可以实施的唯一解决方案......((

于 2012-04-06T23:45:37.410 回答