2009-07-28 2 views
5

나는 다 대다 관계를 만들려고하고 있으며 관리 패널을 통해 그것을 제어 할 수 있기를 원합니다 (-remove 추가 등). 그래서 내 model.py :Django에서 다 대일 관계를 관리하는 방법

from django.db import models 

class Office(models.Model): 
    name = models.CharField(max_length=30) 


class Province(models.Model): 
    numberPlate = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=20) 
    office = models.ForeignKey(Office) 

내 모델에 여러 개의 Office가있을 수있게하고 싶습니다.

그래서 내 admin.py 내부 :

class ProvinceCreator(admin.ModelAdmin): 
     list_filter = ['numberPlate'] 
     list_display = ['name', 'numberPlate','office'] 

class OfficeCreator(admin.ModelAdmin): 
     list_display = ['name'] 

이 내가 관리자 패널과 새로운 지역을 추가하려고하지만 때, 나에게 올바른 것,이 얻을 :

TemplateSyntaxError at /admin/haritaapp/province/ 

Caught an exception while rendering: no such column: haritaapp_province.office_id 

감사합니다

답변

6

그것은 당신이 당신의 모델을 설정 뒤로이 솔기. 지방에 많은 사무실이 있기를 원하면 지방은 Office 모델의 외래 키 여야합니다. "haritaapp_province.office_id 이러한 열을"새를 추가

from django.db import models 

class Province(models.Model): 
    numberPlate = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=20) 

class Office(models.Model): 
    name = models.CharField(max_length=30) 
    province = models.ForeignKey(Province) 

이 relationsship 당신이 점점되지 않는 오류에 대해서는

일대 구현하는 간단하고 매우 직관적 인 방법이 될 것입니다 속성 (사례 사무실)을 모델에 추가하려면 테이블에 열을 수동으로 추가해야합니다. 또는 테이블을 삭제하고 syncdb 다시 실행 : 당신이 모델에 새 필드를 추가 할 때

python manage.py syncdb 

장고 하지 자동으로 테이블에 새 열을 추가 할 것이다.

+0

마침내 나는 "python manage.py syncdb"가 sqlite3 db를 삭제하고 다시 재생해야하므로 "python manage.py syncdb"라고해도 효과적 일 수 있습니다. 선택/추가 중에 해외 항목이 Province_object로 표시됩니다. 대신 이름을 표시하도록 수정하는 방법? 감사 –

+0

오 자체 편집 : \t 데프 __unicode __ (자기) : 나를 위해 일했다 \t 반환 self.name : "장고가 자동으로 새 열을 추가하지 않습니다"하는 페이지 –

+0

심판의를 - 장고 - 남 좋은 일을 자동 마이그레이션 모델 명명 변경 계획은 다중 마이 그 레이션 방식이 더 좋았 으면 좋겠다. – David

1

인라인을 사용하여 문서를 보았습니까? 당신의 admin.py에서

class Office(admin.TabularInline): 
    model = Office 

class ProvinceAdmin(admin.ModelAdmin): 
    inlines = [ 
     Office, 
    ]