Tastypie ToOneField 不工作

Tastypie ToOneField not working

我的模特:

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": "The model '<UserDetails: UserDetails object>' has an empty attribute 'hypo' and doesn't allow a null value."}

我检查过数据,没有空值。

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

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

这里的问题是 UserResource 中的属性 'hypo'。 根据文档属性意味着:

A string naming an instance attribute of the object wrapped by the Resource. The attribute will be accessed during the dehydrate or written during the hydrate.

因此在您的情况下,在 UserResource 中,'hypo' 不是属性,'problem' 是正确的属性(指的是您的模型)。

因此更改 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

我可以通过在问题模型

中提供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 标签的详细信息。