2013-04-14 8 views
8

Próbuję utworzyć zasób (obserwacja), który ma 0 do nieograniczonych komentarzy. Utknąłem w następujący błąd:Django-tastypie Jeden-do-wielu relacji

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

Ponadto, dodając wartość null = True komentarze = (...) spowoduje pustego komentarza obiektów, chociaż nie powinno być komentarzy do obserwacji w pytaniu.

Próbowałem także ingerować w ścieżkę CommentResource2, zmieniając ją na pełną ścieżkę.

Byłem po odwrotnej przewodnika związku z dokumentacją Tastypie za:

Reverse “Relationships”

Oto moje modele:

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' 

i zasobów:

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() 

Odpowiedz

11

Jesteś brakuje atrybutu "comments" w modelu obserwacji, albo dodać

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

lub zmienić

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

Dziękuję bardzo: =). – ObviousCat