2013-04-14 16 views
8

Sto provando a creare una risorsa (Osservazione) che ha da 0 a commenti illimitati. Sono bloccato al seguente errore:Django-tastypie Relazione uno-a-molti

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

Inoltre, l'aggiunta di nulla = True ai commenti = (...) si tradurrà in commento vuoto oggetti, anche se ci dovrebbe essere commenti per osservazioni.

Ho anche provato a fare scherzi con il percorso CommentResource2 cambiandolo in percorso completo.

ho seguito la guida per i rapporti inverso dalla documentazione di Tastypie:

Reverse “Relationships”

Qui sono i miei modelli:

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' 

e risorse:

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

risposta

11

Sei manca l'attributo "commenti" sul modello di osservazione, o aggiungere

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

o passare a

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

La ringrazio molto: =). – ObviousCat