2009-07-28 5 views
5

Ich versuche, eine viele zu eins-Beziehung zu machen und in der Lage zu sein, es zu kontrollieren (fügen Sie -remove usw.) über das Admin-Panel hinzu. Also das ist mein Model.py:Wie man viele zu einer Beziehung in Django verwaltet

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) 

Ich möchte mein Modell erlauben eine Provinz mehrere Office zu haben.

Also in meinem admin.py:

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

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

Das scheint mir richtig, aber wenn ich versuche, eine neue Provinz mit dem Admin-Panel hinzuzufügen, erhalte ich diese:

TemplateSyntaxError at /admin/haritaapp/province/ 

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

Dank

Antwort

6

Es Nähte, dass Sie rückwärts Ihre Modelle Setup haben. Wenn Sie möchten, dass Provinz viele Büros hat, dann sollte Provinz ein Fremdschlüssel im Office-Modell sein.

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) 

Dies wäre einfach und sehr intuitive Art und Weise eine Eins-zu-viele relationsship

Was den Fehler zu implementieren, die Sie bekommen, „keine solche Spalte: haritaapp_province.office_id“, wenn Sie einen neuen hinzufügen Attribut (in Ihrem Fall Büro) an das Modell, sollten Sie entweder manuell Spalte zur Tabelle hinzufügen. Oder die Tabelle löschen und neu starten Sie das syncdb:

python manage.py syncdb 

Django nicht automatisch hinzufügen neue Spalten in der Tabelle, wenn Sie neue Felder zum Modell hinzuzufügen.

+0

endlich konnte ich es funktionieren, sogar "python manage.py syncdb" würde nicht genug, also musste ich die sqlite3 db löschen und es neu :) Eine kleine Frage tho, fremde Elemente zeigen als Province_object beim Auswählen/Hinzufügen. Wie man es repariert, so dass es stattdessen den Namen anzeigt? Grüße –

+0

oh selbst bearbeiten: \t def __unicode __ (self): \t Rückkehr self.name hat den Job für mich: p –

+0

in ref "Django nicht automatisch neue Spalten hinzufügen" - Django-Süd macht einen guten Job Modelländerungen automatisch zu verwalten, obwohl ich wünschte, das Migrationsbenennungsschema wäre mehr Multi-Dev-freundlich. – David

1

Haben Sie sich die Instruktionen für Inlines angesehen?

In Ihrem admin.py

class Office(admin.TabularInline): 
    model = Office 

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