【问题标题】:Tastypie ToOneField not workingTastypie ToOneField 不工作
【发布时间】:2017-02-19 07:59:58
【问题描述】:

我的模特:

class UserDetails(models.Model):
    user=models.ForeignKey(User)
    email=models.CharField(max_length=30)
    name=models.CharField(max_length=30)

class Problem(models.Model):
    user=models.OneToOneField(UserDetails)
    onset_time=models.CharField(max_length=20)
    symptoms=models.CharField(max_length=50)

资源:

class ProblemResource(ModelResource):
    class Meta:
        queryset=Problem.objects.all()
        resource_name="hypo"

class UserResource(ModelResource):
    hypo=fields.ToOneField(ProblemResource,'hypo')
    class Meta:
        queryset=UserDetails.objects.all()
        resource_name="user"

我想使用 '/user' api 调用获取特定用户的问题,但我收到此错误:-

{"error": "模型 '' 有一个空属性 'hypo' 并且不允许空值。"}

我浏览过数据,没有空值。

【问题讨论】:

  • 解决了吗?

标签: django tastypie


【解决方案1】:

如果在模型中为 null 指定默认值会怎样。

user=models.OneToOneField(UserDetails, on_delete=models.SET_NULL, null=True, blank=True)

【讨论】:

  • 我认为问题在于 'UserResource' 而不是 'Problem' 模型
  • 试过你的解决方案,但仍然得到同样的错误
【解决方案2】:

这里的问题是 UserResource 中的属性“hypo”。 根据 docs 属性的含义:

一个字符串,命名资源包装的对象的实例属性。该属性将在脱水期间访问或在水合物期间写入。

因此,在您的 UserResource 中,“hypo”不是属性,“问题”是正确的属性(指您的模型)。

所以改变UserResource中的属性就解决了问题:

class UserResource(ModelResource):
    hypo=fields.ToOneField(ProblemResource,'problem')
    class Meta:
        queryset=UserDetails.objects.all()
        resource_name="user"

阅读更多:http://django-tastypie.readthedocs.io/en/latest/fields.html#common-field-options

【讨论】:

    【解决方案3】:

    我可以通过在问题模型中提供related_name='hypo' 来解决问题

    class Problem(models.Model):
       user=models.OneToOneField(UserDetails,related_name='hypo')
       onset_time=models.CharField(max_length=20)
       symptoms=models.CharField(max_length=50)
    

    Django documentation 包含有关 related_name 标记的更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多