2017-12-21 4 views
-1

Ich habe ein DB-Modell:Django nicht erlaubt Datensatz DB hinzuzufügen aufgrund nicht-Tabellen-Instanz

class building_list(models.Model): 
    building_id = models.CharField(max_length=25, verbose_name="Building ID", unique=True) 

    def __unicode__(self): 
     return self.building_id 

class data(models.Model): 
    oDate = models.DateField() 
    building_id = models.ForeignKey(building_list, to_field = "building_id") 
    content = models.CharField(max_length=25, verbose_name="Content") 

    def __unicode__(self): 
     return self.content 

Es gibt kein Problem Rekord über Admin-Portal hinzufügen, ich building_id von SELECT-Liste wählen und Alles ist okay.

Aber es gibt ein Problem, wenn ich versuche, Datensatz über Ansicht hinzuzufügen. Lassen Sie mich Ihnen meinen Code zeigen:

url(r'^(?P<building_id>[\w-]+)/$', views.test, name='test'), 

def test(request, building_id): 
    if request.method == 'POST': 
     oDate = request.POST.get('oDate', '') 
     content = request.POST.get('content', '') 

     row = data( 
      oDate = oDate, 
      building_id = building_id, 
      content = content 
     ) 

     return True 

Ich sehe, dass

Cannot assign "u'BrI9'": "data.building_id " must be a "building_list" instance. 

Kann mir jemand erklären, was ich falsch mache?

+0

Ich sehe durchaus ein paar Probleme in Konventionen insbesondere die Namen der Klassen zu benennen. Ich finde es schwierig, data() als Initialisierung einer Instanz zu lesen. Ok, die Fehlermeldung, die klarstellt, dass building_id eine Instanz von BuildingList sein sollte, aber das Argument ist Nummer. So können Sie Gebäude Liste Objekt initialisieren müssen dann gehen für "data" –

+1

row = Daten ( odate = odate, building_id = building_list.objects.get (building_id = building_id), content = Inhalt ) –

+0

Vielen Dank Muthuraj Es hat das Problem gelöst! –

Antwort

1

Sie haben Ihren Fremdschlüssel building_id genannt, daher lautet die ID building_id_id. Wenn Sie die ID anstelle der Instanz zugewiesen werden soll, dann müssen Sie tun:

row = data( 
    oDate=oDate, 
    building_id_id=building_id, 
    content=content, 
) 

Der empfohlene Ansatz in Django wäre Ihre Fremdschlüssel building zu nennen.

class data(models.Model): 
    oDate = models.DateField() 
    building = models.ForeignKey(building_list, to_field = "building_id") 

Jetzt ist die ID building_id, und Sie tun können:

row = data( 
    oDate=oDate, 
    building_id=building_id, 
    content=content , 
) 
Verwandte Themen