2017-02-19 24 views
1

我的模型:Tastypie ToOneField不工作

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" 

我想用“/用户” API调用来获取特定用户的问题,但我得到这个错误: -

{“error”:“模型'< UserDetails:UserDetails对象>'有一个空属性'hypo'并且不允许空值。”}

我已经通过数据,并没有空值。

+0

这个问题解决了吗? – Deepak

回答

0

我是能够解决的问题只是在问题模型提供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标记的更多详细信息。

0

如果您在模型中指定了默认值null,该怎么办?

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

我认为问题是与'UserResource'不是'问题'模型 – Dilpreet

+0

试过你的解决方案,但仍然得到相同的错误 – Dilpreet

0

这里的问题是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内,“低”不是一个属性,“问题”是(指你的模型)正确的属性。

因此改变在UserResource属性解决了这个问题:

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

了解更多:​​