2015-07-14 19 views
6

Mam dwie tabele ze starszej bazy danych, które chcę uzyskać dostęp z witryny Django. Wyglądają tak:Non-primary klucze obce w Django

Table A 
id (int, primary key) 
name (string, unique) 
... 

Table B 
id (int, primary key) 
name 
record_date 
(name, record_date are unique together) 
... 

Jak mogę powiedzieć, że mój model Django Tabela A ma relacji jeden-do-wielu z B na A.name=B.name? Zwykła relacja ForeignKey wymagałaby, aby B używać A.id zamiast name, ale nie mogę zmodyfikować struktury istniejącej starszej bazy danych.

Odpowiedz

9

Użyj opcji to_field i db_column.

class B(models.Model): 
    name = models.ForeignKeyField(A, to_field="name", db_column="name") 

Po utworzeniu klucza obcego, można uzyskać dostęp do wartości i związanego instancji w następujący sposób:

>>> b = B.objects.get(id=1) 
>>> b.name_id # the value stored in the 'name' database column 
>>> b.name # the related 'A' instance 
Powiązane problemy