【发布时间】:2010-12-02 18:18:08
【问题描述】:
让我对 Django 固定装置感到困惑的一件事是,您必须指定每个模型的主键。有没有什么方法可以不用为每一行指定主键就可以创建fixture?
【问题讨论】:
-
你是用manage.py --dumpdata还是手写?
让我对 Django 固定装置感到困惑的一件事是,您必须指定每个模型的主键。有没有什么方法可以不用为每一行指定主键就可以创建fixture?
【问题讨论】:
使用“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 中有更多的验证调用。* 并不能保证所有的内联 e.t.c 都能正常工作。 那是我可以实施的唯一解决方案......((
【讨论】: