2014-01-05 4 views
0

브라우저에서 실행되는 django 앱에서 dcm4chee pacs 데이터베이스 (postgresql)의 데이터베이스 필드를 표시하려고합니다. 나는 모델을 만드는 inspectdb를 사용했다 - 아래의 관련 비트 : 내가 장고 관리자에서 응용 프로그램에 추가 할 때, 나는 "초과 최대 재귀 깊이"를 얻을 그러나django를 레거시 데이터베이스에 연결하는 중 오류가 발생했습니다.

class Study(models.Model): 


    pk = models.IntegerField(primary_key=True) 
    patient_fk = models.ForeignKey(Patient, null=True, db_column='patient_fk', blank=True) 
    description = models.CharField(max_length=400, blank=True) 

    class Meta: 
     db_table = 'study' 

    def __unicode__(self): 
     return u"%s" % self.pk 

을 (라인 469 시간의 수백 반복) . 간단한 추적 :

Traceback: 

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper 
    372.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 
    91.      response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    89.   response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner 
    202.    return view(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper 
    25.    return bound_func(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 
    91.      response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func 
    21.     return func(self, *args2, **kwargs2) 
File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py" in inner 
    223.     return func(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in add_view 
    1022.    form = ModelForm(initial=initial) 
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in __init__ 
    240.    self.instance = opts.model() 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in __init__ 
    405.     setattr(self, field.attname, val) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in _set_pk_val 
    469.   return setattr(self, self._meta.pk.attname, value) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in _set_pk_val 
    469.   return setattr(self, self._meta.pk.attname, value) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in _set_pk_val 

postgresql 데이터베이스를 구축 한 원본 파일은 아래에 복사 붙여 넣기됩니다. 그것은 꽤 길지만 대부분의 테이블은 장고 관리자를 통해 액세스 할 때 유사한 오류를 주며 공간은 여기에 제한되어 있습니다. 예를 들어 '연구'테이블을 볼 수 있습니다.

CREATE TABLE ae (
    pk    SERIAL8 NOT NULL CONSTRAINT ae_pk PRIMARY KEY, 
    aet    TEXT NOT NULL, 
    hostname   TEXT NOT NULL, 
    port    INTEGER NOT NULL, 
    cipher_suites  TEXT, 
    pat_id_issuer  TEXT, 
    acc_no_issuer  TEXT, 
    user_id   TEXT, 
    passwd   TEXT, 
    fs_group_id  TEXT, 
    ae_group   TEXT, 
    ae_desc   TEXT, 
    wado_url   TEXT, 
    station_name  TEXT, 
    institution  TEXT, 
    department  TEXT, 
    installed   BOOLEAN NOT NULL, 
    vendor_data  BYTEA 
); 
CREATE UNIQUE INDEX aet ON ae(aet); 
CREATE INDEX hostname ON ae(hostname); 
CREATE INDEX ae_group ON ae(ae_group); 

CREATE TABLE code (
    pk    SERIAL8 NOT NULL CONSTRAINT code_pk PRIMARY KEY, 
    code_value  TEXT NOT NULL, 
    code_designator TEXT NOT NULL, 
    code_version  TEXT, 
    code_meaning  TEXT 
); 
CREATE UNIQUE INDEX code_value ON code(code_value,code_designator,code_version); 

CREATE TABLE issuer (
    pk    SERIAL8 NOT NULL CONSTRAINT issuer_pk PRIMARY KEY, 
    entity_id   TEXT, 
    entity_uid  TEXT, 
    entity_uid_type TEXT 
); 
CREATE UNIQUE INDEX entity_id ON issuer(entity_id); 
CREATE UNIQUE INDEX entity_uid ON issuer(entity_uid,entity_uid_type); 

CREATE TABLE patient (
    pk    SERIAL8 NOT NULL CONSTRAINT patient_pk PRIMARY KEY, 
    merge_fk   INT8, 
    pat_id   TEXT, 
    pat_id_issuer  TEXT, 
    pat_name   TEXT, 
    pat_fn_sx   TEXT, 
    pat_gn_sx   TEXT, 
    pat_i_name  TEXT, 
    pat_p_name  TEXT, 
    pat_birthdate  TEXT, 
    pat_sex   TEXT, 
    pat_custom1  TEXT, 
    pat_custom2  TEXT, 
    pat_custom3  TEXT, 
    created_time  TIMESTAMP, 
    updated_time  TIMESTAMP, 
    pat_attrs   BYTEA, 
FOREIGN KEY (merge_fk) REFERENCES patient(pk) 
); 
CREATE INDEX pat_merge_fk ON patient(merge_fk); 
CREATE INDEX pat_id ON patient(pat_id, pat_id_issuer); 
CREATE INDEX pat_name ON patient(pat_name); 
CREATE INDEX pat_fn_sx ON patient(pat_fn_sx); 
CREATE INDEX pat_gn_sx ON patient(pat_gn_sx); 
CREATE INDEX pat_i_name ON patient(pat_i_name); 
CREATE INDEX pat_p_name ON patient(pat_p_name); 
CREATE INDEX pat_birthdate ON patient(pat_birthdate); 
CREATE INDEX pat_sex ON patient(pat_sex); 
CREATE INDEX pat_custom1 ON patient(pat_custom1); 
CREATE INDEX pat_custom2 ON patient(pat_custom2); 
CREATE INDEX pat_custom3 ON patient(pat_custom3); 

CREATE TABLE other_pid (
    pk    SERIAL8 NOT NULL CONSTRAINT other_pid_pk PRIMARY KEY, 
    pat_id   TEXT NOT NULL, 
    pat_id_issuer  TEXT NOT NULL 
); 
CREATE UNIQUE INDEX other_pat_id ON other_pid(pat_id, pat_id_issuer); 

CREATE TABLE rel_pat_other_pid (
    patient_fk  INT8, 
    other_pid_fk  INT8, 
FOREIGN KEY (patient_fk) REFERENCES patient(pk), 
FOREIGN KEY (other_pid_fk) REFERENCES other_pid(pk) 
); 
CREATE INDEX other_pid_pat_fk ON rel_pat_other_pid(patient_fk); 
CREATE INDEX pat_other_pid_fk ON rel_pat_other_pid(other_pid_fk); 

CREATE TABLE study (
    pk    SERIAL8 NOT NULL CONSTRAINT study_pk PRIMARY KEY, 
    patient_fk  INT8, 
    accno_issuer_fk INT8, 
    study_iuid  TEXT NOT NULL, 
    study_id   TEXT, 
    study_datetime TIMESTAMP, 
    accession_no  TEXT, 
    ref_physician  TEXT, 
    ref_phys_fn_sx TEXT, 
    ref_phys_gn_sx TEXT, 
    ref_phys_i_name TEXT, 
    ref_phys_p_name TEXT, 
    study_desc  TEXT, 
    study_custom1  TEXT, 
    study_custom2  TEXT, 
    study_custom3  TEXT, 
    study_status_id TEXT, 
    mods_in_study  TEXT, 
    cuids_in_study TEXT, 
    num_series  INTEGER NOT NULL, 
    num_instances  INTEGER NOT NULL, 
    ext_retr_aet  TEXT, 
    retrieve_aets  TEXT, 
    fileset_iuid  TEXT, 
    fileset_id  TEXT, 
    availability  INTEGER NOT NULL, 
    study_status  INTEGER NOT NULL, 
    checked_time  TIMESTAMP, 
    created_time  TIMESTAMP, 
    updated_time  TIMESTAMP, 
    study_attrs  BYTEA, 
FOREIGN KEY (patient_fk) REFERENCES patient(pk), 
FOREIGN KEY (accno_issuer_fk) REFERENCES issuer(pk) 
); 
CREATE INDEX patient_fk ON study(patient_fk); 
CREATE INDEX accno_issuer_fk ON study(accno_issuer_fk); 
CREATE UNIQUE INDEX study_iuid ON study(study_iuid); 
CREATE INDEX study_id ON study(study_id); 
CREATE INDEX study_datetime ON study(study_datetime); 
CREATE INDEX accession_no ON study(accession_no); 
CREATE INDEX ref_physician ON study(ref_physician); 
CREATE INDEX ref_phys_fn_sx ON study(ref_phys_fn_sx); 
CREATE INDEX ref_phys_gn_sx ON study(ref_phys_gn_sx); 
CREATE INDEX ref_phys_i_name ON study(ref_phys_i_name); 
CREATE INDEX ref_phys_p_name ON study(ref_phys_p_name); 
CREATE INDEX study_desc ON study(study_desc); 
CREATE INDEX study_custom1 ON study(study_custom1); 
CREATE INDEX study_custom2 ON study(study_custom2); 
CREATE INDEX study_custom3 ON study(study_custom3); 
CREATE INDEX study_status_id ON study(study_status_id); 
CREATE INDEX study_checked ON study(checked_time); 
CREATE INDEX study_created ON study(created_time); 
CREATE INDEX study_updated ON study(updated_time); 
CREATE INDEX study_status ON study(study_status); 

관련 비트가 삭제 된 경우 사과드립니다. 추가 정보를 기꺼이 제공 할 것입니다.

답변

1

pk은 특별한 경우로 취급됩니다. 당신은 당신의 분야를 pk으로 지칭하지 말아야합니다. 시도 :

id = models.IntegerField(primary_key=True, db_column="pk") 

문제는 pk 속성에 대한 세터로 사용되는 _set_pk_val,, 그냥 기본 키, _meta.pk.attname에 대한 속성 이름이 'PK'

+0

감사 양동이 경우 자신을 호출 . 나는 이것을 온라인으로 게시하는 것이 옳았다는 것을 알았다 !! – Maelstorm

+0

위대한 solutioin, 나는 잠시 동안 이것으로 straggeling했습니다 :) – Oran

관련 문제