2016-04-29 19 views
0

Ich habe zwei Modelle durch ein Viele-zu-viele-Feld bezogen.Django viele zu viele funktioniert nicht in unittest aber funktioniert in admin

class Tires(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    brand = models.CharField(max_length=50) 

class Car(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    brand = models.CharField(max_length=50) 
    tires = models.ManyToManyField('Tires', blank=True) 

Es funktioniert gut, wenn ich Reifen auf ein Auto durch die Admin-Seite hinzufügen, aber es in meinen Unittests nicht funktioniert und ich kann nicht herausfinden, was das Problem (etwas wirklich einfach wahrscheinlich)

ist

das ist mein Unittest:

def test_many_to_many(self): 
    tires_1 = Tires(brand='bridgestone') 
    tires_1.save() 
    car_1 = Car(brand='BMW') 
    car_1.save() 
    car_1.tires.add(tires_1) 
    car_1.save() 

Dies wirft keine Ausnahmen, aber wenn ich car_1.tires drucken, sagt es carthings.Tires.None ich habe es anders versucht, um und fügte hinzu, car_1 zu reifen_1. car_set aber das gibt das gleiche Ergebnis. Ich habe auch versucht, ein Objekt einer anderen Klasse im Viele-zu-Vielen-Feld hinzuzufügen, nur um zu sehen, was passieren würde, was einen Fehler verursacht. Es sieht so aus, als ob das Hinzufügen funktioniert, aber es spart einfach nicht oder so etwas?

+0

Setzen Sie Bridgestone zwischen Apostrophe. – rfkortekaas

+0

@rfkortekaas Ich werde das bearbeiten, es ist nicht das Problem, aber ich habe mein Modell ein wenig modifiziert, um es hier zu zeigen –

Antwort

3

Sie tun dies wahrscheinlich:

>> print car_1.tires 
carthings.tires.None 

, die eine Darstellung der "verwandte Objekte Manager" ist. Sie wollen wahrscheinlich etwas tun:

>> print car_1.tires.all() 
[<Tire 1>] 

, die eine queryset zurückkehrt, und seine Darstellung ist sinnvoller, da es tatsächlich eine Abfrage führt die ersten Elemente in der Beziehung zu zeigen.

Übrigens brauchen Sie nicht save das Modell nach dem Hinzufügen etwas zu den Reifen Beziehung, da Sie die Cars-Tabelle nicht aktualisieren müssen.