2013-04-14 9 views
8

Я пытаюсь создать ресурс (наблюдение), который имеет 0 до неограниченных комментариев. Я застрял на следующую ошибке:Django-tastypie Отношение один-ко-многим

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

Кроме того, добавление пустого = True комментариям = (...) приведет к пустому комментарию объектов, хотя должен быть комментариями для наблюдений в вопросе.

Я также пытался испортить путь CommentResource2, изменив его на полный путь.

Я был после обратного руководства взаимоотношениями с документацией Tastypie по:

Reverse “Relationships”

Вот мои модели:

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' 

и ресурсы:

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

ответ

11

Вы отсутствует атрибут «комментарии» в модели наблюдения, либо добавить

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

или изменения

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

спасибо: =). – ObviousCat

Смежные вопросы