2013-04-14 18 views
8

Ich versuche eine Ressource (Beobachtung) zu erstellen, die 0 bis unendlich viele Kommentare enthält. Ich bin auf dem folgenden Fehler fest:Django-tastypie Eins-zu-viele-Beziehung

"error": "The model '<Observation: Observation object>' has an empty attribute 'comments' and doesn't allow a null value." 

Auch das Hinzufügen null = True Kommentare = (...) in leeren Kommentar führen Objekte, obwohl es sollte Kommentare zu Beobachtungen in Frage.

Ich habe auch versucht, rum mit CommentResource2 Pfad durch Ändern auf den vollständigen Pfad.

Ich habe im Anschluss an die umgekehrte Beziehung Führung von Dokumentation des Tastypie gewesen:

Reverse “Relationships”

Hier sind meine Modelle:

class Observation(ObsModel): 
    taxon_node = models.ForeignKey(TaxonNode, related_name = 'observation_taxon_node', null = True) 
    substrate = models.ForeignKey(TaxonNode, related_name = 'observation_substrate', null = True, blank=True) 
    source = models.CharField(max_length=255, blank=True) 
    sample = models.ForeignKey(Sample) 
    remarks = models.TextField(blank = True) 
    exact_time = models.DateTimeField(null=True) 
    individual_count = models.IntegerField(null = True) 
    is_verified = models.NullBooleanField(null = True) 
    verified_by = models.ForeignKey(User, null = True) 
    verified_time = models.DateTimeField('time verified', null = True) 

    class Meta(): 
     app_label = 'observation' 


class Comment(models.Model): 
    observation = models.ForeignKey(Observation) 
    comment = models.TextField() 
    created_time = models.DateTimeField('time created', auto_now_add=True, editable=False) 

    class Meta: 
     app_label = 'observation_moderate' 

und Ressourcen:

class ObservationResource2(ModelResource): 
    comments = fields.ToManyField('apps.api.CommentResource2', 'comments') 
    class Meta: 
     queryset = Observation.objects.filter(is_verified=False) 
     authentication = SessionAuthentication() 
     authorization = DjangoAuthorization() 
     resource_name = 'observation' 

class CommentResource2(ModelResource): 
    observation = fields.ToOneField(ObservationResource2, 'observation') 
    class Meta: 
     queryset = Comment.objects.all() 
     resource_name = 'comments' 
     authentication = SessionAuthentication() 
     authorization = DjangoAuthorization() 

Antwort

11

Sie sind das "comments" -Attribut des Beobachtungsmodells fehlt, entweder hinzufügen

observation = models.ForeignKey(Observation, related_name="comments") 

oder ändern zu

comments = fields.ToManyField('apps.api.CommentResource2', 'comment_set', null=True) 
+0

Vielen Dank: =). – ObviousCat