2016-04-15 6 views
0

models.pydjango-orm: Wie eine Eins-zu-Eins-Beziehung Feldwert

class Area(models.Model): 
    area_name = models.CharField(max_length=255, null=False, blank=False) 
    description = models.TextField(null=False, blank=False) 

class AreaPoint(models.Model): 
    x_axis = models.FloatField(default=0.0) 
    y_axis = models.FloatField(default=0.0) 
    area = models.OneToOneField(Area,primary_key=True,on_delete=models.CASCADE) 

Ich versuche, zwei Verfahren zu aktualisieren, aber beide nicht, treten Sie mit mir führen. danke

# first method : 
# Area.objects.filter(id=304).update(area_name="today is 1", description="today is 1", areapoint__x_axis=111,areapoint__y_axis=222) 
# error : Area has no field named 'areapoint__y_axis' 

# second method : 
obj = Area.objects.get(id=304) 
print obj.areapoint.x_axis # 277 
print obj.areapoint.y_axis # 65 
obj.areapoint.x_axis = 100 
obj.areapoint.y_axis = 200 
print obj.areapoint.x_axis # 100 
print obj.areapoint.y_axis # 200 
obj.save() 
print obj.areapoint.x_axis # 100 
print obj.areapoint.y_axis # 200 

Die zweite Methode ist seltsam.
areapoint.x_axis und areapoint.y_axis sind wirklich nach dem Update unterschiedlich. Aber in meiner Datenbank.Es ist immer noch das gleiche.

+0

Do not Sie müssen th speichern e 'Areapoint' anstelle von' obj'? d. h. 'obj.areapoint.save()' – AKS

Antwort

4

In beiden Ansatz versuchen Sie, das Objekt Area und nicht das Objekt AreaPoint zu aktualisieren.

Hier ist, wie Sie es tun könnten beide Ansätze:

1. Ansatz: mit update Methode:

# here is what you are doing: 
Area.objects.filter(id=304).update(area_name="today is 1", description="today is 1", areapoint__x_axis=111,areapoint__y_axis=222) 

Above wird ein Objekt von Area zurückkehren und da es keine Felder areapoint__x_axis sind usw. Es löst einen Fehler aus.

Was könnten Sie tun, ist Filter auf AreaPoint statt und aktualisieren:

AreaPoint.objects.filter(area_id=304).update(x_axis=111, y_axis=222) 

2. Ansatz:

obj = Area.objects.get(id=304) 
obj.areapoint.x_axis = 100 
obj.areapoint.y_axis = 200 

# save obj.areapoint instead 
obj.areapoint.save() 

3. Ansatz:

areapoint = AreaPoint.objects.get(area_id=304) 
areapoint.x_axis = 100 
areapoint.y_axis = 200 
areapoint.save() 
+0

vielen Dank. '' '' obj.areapoint.save() '' '' rettete mein Leben – user2492364