Django: Create fixtures without specifying a primary key?

拟墨画扇 提交于 2019-11-28 17:09:57

Use "pk: null" instead of "pk: 1" (or whatever), which will result in the PK being set to None, and when the object is saved a primary key will be assigned.

This works for YAML at least, I'm guessing you're using that if you are creating by hand.

You should have a look at Natural Keys if you're wiling to add relation without using pk's

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

If you check out the manage.py dumpdata command, you will see some options called --natural-foreign, --natural-primary. If you look at the output you can see that the objects are dumped without using primary keys or foreign keys.

A friend of mine suggested the fixture module: http://farmdev.com/projects/fixture/

I had to deal with existing DB schema without possibility to change it, so I need a table with complex primary key or without it at all - but not with the serial one. What I did:

I've specified a primary_key=True to the field, which should not be unique at all and wrote overloaded method:

class ContraIndicationsMedicines(models.Model):

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

    def validate_unique(self, exclude=None): 
        pass

In fact, it worked for my needs, but there are more validations call inside django.contib.admin.* and not all the inlines e.t.c are guaranteed to work. That was the only solution I could implement... ((

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!