Django的tastypie一个一对多的关系(Django-tastypie One-To-Man

2019-08-22 23:28发布

我试图创建一个资源(观察)有0到无限的意见。 我被困在了以下错误:

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

此外,加入空= true要评论=(...)将导致空注释即使应该有问题意见的评论对象。

我也试图将其更改为完整路径瞎搞与CommentResource2路径。

我一直在关注从Tastypie文档的反向关系指南:

反“关系”

这里是我的模型:

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

Answer 1:

这是因为丢失的观测模型的“意见”属性,无论是加

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

或改变

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


文章来源: Django-tastypie One-To-Many relationship