2009-09-30 14 views

Odpowiedz

75

użyć "pk: null" zamiast "pk: 1" (lub cokolwiek), co spowoduje w PK jest ustawione na None, a gdy obiekt jest zapisany, zostanie przypisany klucz podstawowy.

To działa dla YAML przynajmniej, domyślam się, że używasz tego, jeśli tworzysz ręcznie.

+18

Musisz być ostrożny podczas korzystania urządzenie bez pk. Przy przywoływaniu danych obciążenia spróbuje dodać nowe wpisy zamiast nadpisywać istniejące. – Danosaure

+1

Spookylukey lub @Danosaure Czy istnieje sposób na generowanie urządzeń "pk: null" za pomocą manage.py dumpdata? Łączę dwie bazy danych z identycznymi schematami i opracowuję, jak to zrobić z dumpdata/loaddata. –

+1

@BenRoberts Problem z pk: null polega na tym, że możesz skończyć z duplikatami. Zwykle po prostu dumpdata i vi plik do zrobienia tego rodzaju rzeczy. – Danosaure

0

Mój przyjaciel zaproponował moduł fixture: http://farmdev.com/projects/fixture/

+0

To wydaje się być uczciwym stosem kodu standardowego do pracy z. Mój przepływ pracy do generowania danych do testowania polega często na użyciu interfejsu administratora do tworzenia danych, a następnie użycie narzędzia django-test-utils do zrzucenia go do pliku, a następnie (w razie potrzeby) unieważnienia dowolnego pk wpisów –

13

Trzeba spojrzeć na fizyczne Keys jeśli zechce dodać relację bez użycia pk na

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

+7

Niestety, dokumenty na temat kluczy naturalnych nie wspominają o użytej wyżej sztuczce pk = null Musisz mieć zarówno pk = null, jak i klucze naturalne, aby mieć w pełni funkcjonalne urządzenie p.p. – Cerin

+0

Niestety, ten link już nie działa. Oto który działa dzisiaj, zobaczmy jeśli trwa dłużej niż 3 lata: https://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-app-label-app-label-app-label-model –

0

miałem do czynienia z istniejącego schematu DB bez możliwości jego zmiany, więc potrzebuję tabela ze złożonym kluczem podstawowym lub bez niego - ale nie z numerem seryjnym. Co zrobiłem:

Mam określono primary_key = true do pola, które nie powinny być w ogóle wyjątkowy i wrote przeciążona metoda:

class ContraIndicationsMedicines(models.Model): 

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

    def validate_unique(self, exclude=None): 
     pass 

W rzeczywistości pracował dla moich potrzeb, ale istnieje więcej sprawdzeń sprawdzających wewnątrz django.contib.admin. * i nie wszystkie inlines itp. działają poprawnie. To było jedyne rozwiązanie, które mógłbym zaimplementować ... ((

0

Jeśli zaznaczysz polecenie manage.py dumpdata, zobaczysz kilka opcji o nazwie --natural-foreign, --natural-primary. na wyjściu widać, że obiekty są zrzucane bez użycia kluczy podstawowych lub kluczy obcych:

Powiązane problemy