2017-02-19 50 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" 

瞭解更多:​​