2009-07-28 14 views
5

Próbuję nawiązać wiele do jednego związku i chcę go kontrolować (dodawać - usuwać itp.) Za pośrednictwem panelu administracyjnego. To jest mój model.py:Jak zarządzać wieloma relacjami w 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) 

Chcę, aby mój model pozwalał prowincjom na posiadanie kilku Office.

Więc w moim admin.py:

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

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

To wydaje mi się poprawne, jednak gdy próbuję dodać nową prowincję z panelu administratora, otrzymuję to:

TemplateSyntaxError at /admin/haritaapp/province/ 

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

Thanks

Odpowiedz

6

szwy, że masz swoje modele ustawień tyłu. Jeśli chcesz, aby Prowincja miała wiele urzędów, prowincja powinna być kluczem obcym w modelu Office.

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) 

Byłoby to bardzo prosty i intuicyjny sposób, aby realizować jeden-do-wielu relationsship

Co do błędu, że są coraz „ma takiej kolumny: haritaapp_province.office_id”, gdy dodasz nowy atrybut (w twoim biurze) do modelu, powinieneś ręcznie dodać kolumnę do tabeli. Lub usunąć tabelę i ponownie uruchomić syncdb:

python manage.py syncdb 

Django nie automatycznie dodawać nowe kolumny do tabeli po dodaniu nowych pól do modelu.

+0

wreszcie udało mi się sprawić, że działa, nawet "python manage.py syncdb" nie wystarczy, więc musiałem usunąć sqlite3 db i odzyskać go :) Jedno małe pytanie, zagraniczne elementy pokazują jako Province_object podczas wybierania/dodawania. Jak to naprawić, aby wyświetlała nazwę? Pozdrowienia –

+0

oh edytować własny: \t def __unicode __ (self): \t powrót self.name nie praca dla mnie: p –

+0

w odnośniku do "Django nie będzie automatycznie dodawać nowe kolumny" - Django-południe ma dobrą pracę auto-zarządzania zmianami modelu, chociaż chciałbym, aby schemat nazewnictwa migracji był bardziej przyjazny dla wielu deweloperów. – David

1

Czy obejrzałeś dokumenty do wykonywania Inlines?

W swojej admin.py

class Office(admin.TabularInline): 
    model = Office 

class ProvinceAdmin(admin.ModelAdmin): 
    inlines = [ 
     Office, 
    ] 
Powiązane problemy