让我对 Django 固定装置感到困扰的一件事是,您必须指定每个模型的主键。有什么方法可以创建固定装置而不必为每一行指定主键?
5 回答
使用“pk: null”而不是“pk: 1”(或其他),这将导致 PK 设置为 None,并且在保存对象时将分配一个主键。
这至少适用于 YAML,如果您是手动创建的,我猜您正在使用它。
如果你想在不使用 pk 的情况下添加关系,你应该看看 Natural Keys
https://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-app-label-app-label-app-label-model
如果您查看 manage.py dumpdata 命令,您将看到一些名为 --natural-foreign、--natural-primary 的选项。如果您查看输出,您可以看到对象在没有使用主键或外键的情况下被转储。
我的一个朋友推荐了这个fixture
模块: http: //farmdev.com/projects/fixture/
我必须处理现有的数据库模式而无法更改它,所以我需要一个具有复杂主键或根本没有它的表 - 但不需要串行表。我做了什么:
我已经为该字段指定了一个 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.* 中有更多的验证调用,并不是所有的内联等都可以保证工作。这是我可以实施的唯一解决方案......((