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 shell 时,我得到以下信息:

$ ./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'
>>>

为什么 User 对象没有像得到 group_set 那样得到 wish_set ?

4

1 回答 1

3

那是因为您将它们重命名为wish_user,wish_buyerwish_adder. 而对于组,您从属性和显式中wish_set隐含.ownergroup_users

related_name参数告诉 Django 如何命名反向关系。如果不给它,它将是<field name>_set

于 2013-10-15T12:37:37.423 回答