2013-10-15 37 views
0

我爲以下模型使用了我的第一個django網站。但是我目前在如何訪問用戶的意願方面存在問題。未將外鍵方法添加到用戶對象

class Group(models.Model): 
    title = models.CharField(max_length=100) 
    users = models.ManyToManyField(User, related_name='group_users') 
    description = models.TextField() 
    added = models.DateTimeField() 
    owner = models.ForeignKey(User) 
    def __unicode__(self): 
     return self.title 

class Wish(models.Model): 
    name = models.CharField(max_length=50) 
    user = models.ForeignKey(User, related_name='wish_user') 
    bought = models.IntegerField(default=0) 
    bought_by = models.ForeignKey(User, related_name='wish_buyer') 
    added_by = models.ForeignKey(User, related_name='wish_adder') 
    cost = models.FloatField() 
    added = models.DateTimeField() 
    def __unicode__(self): 
     return self.name 
    def is_bought(self): 
     return self.bought % 2 == 1 
    def is_editable(self): 
     return self.added >= timezone.now() - datetime.timedelta(hours=1) 

當我去Django的殼,我得到如下:

$ ./manage.py shell 
>>> from django.contrib.auth.models import User 
>>> from wish.models import Wish, Group 
>>> user1 = User.objects.filter(id=1)[0] 
>>> user1.group_set.all() 
[] 
>>> user1.wish_set.all() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'User' object has no attribute 'wish_set' 
>>> 

爲什麼沒有用戶對象獲得wish_set像它得到group_set?

回答

3

這是因爲您將它們重命名爲wish_user,wish_buyerwish_adder。而對於該組,您具有owner屬性的wish_set隱含性和明確的group_users

related_name參數告訴Django如何命名反向關係。如果它沒有給出它將是<field name>_set

+0

啊,這是有道理的!只爲其他人搜索這個,當我使用'>>> user1.wish_user.all()'它確實返回我所期望的。謝謝! – gnur