Django查询不存在

时间:2013-03-12 01:34:18

标签: django

我一直在努力创建一个应用程序,允许用户从昨天到今天跟随对方的个人资料,到目前为止我还没有成功。

我在创建以下函数时遇到问题,该函数允许我从他跟随的特定用户中检索用户。

示例。如果约翰跟随戴安娜。我希望能够检索名为Diana的用户并将其与我的模块一起使用。

如果这没有意义,我真的很抱歉。我正在努力解释我的情况。

class Person(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)
class Board(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

这些解决方案中的大部分都没有给我任何疑问

这是我尝试过的解决方案之一。

class UserLink(models.Model):
    from_user = models.ForeignKey(User , related_name = "following_set")
    to_user = models.ForeignKey(User , related_name = "follower_set")
    date_added = models.DateTimeField(default = datetime.now)

    def __unicode__(self):
        return "%s is following %s" % (self.from_user.username,self.to_user.username)
    def save(self,**kwargs):
        if self.from_user == self.to_user:
            raise ValueError("Cannot follow yourself ")
        super(UserLink , self).save(**kwargs)
    class Meta:
        unique_together = (('to_user','from_user'),)

我尝试检索特定用户关注的用户并将其用于我的模块,例如Person,但它给了我一个错误没有查询。

def Follow(request,username=""):
        if request.method == "POST":
                username = request.POST.get('follow',False)
                user = User.objects.get(username=username)
                UserLink.objects.create(from_user=request.user,to_user=user)
                return HttpResponseRedirect(reverse('world:Profile'))
        return HttpResponseRedirect(reverse('world:Profile'))

我也试过以下这个功能,但它只跟着自己,我把自己改成了用户,但它不允许我让这个人跟着

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    follows = models.ManyToManyField('self', related_name='followed_by', symmetrical=False)

>>>from pet.models import *
>>>from django.contrib.auth.models import User
>>>user = User.objects.get(username='Peter')
>>>user1 = User.objects.get(username='Sarah')
>>>p = UserProfile.objects.filter(user=user,follows=user1)
>>>Error no field called follows

如何创建以下类,允许检索他们所关注的人并将其与我的模块(例如Person)一起使用?

有人能帮助我吗?谢谢你的社区!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你就会走上正确的道路,与多对多关系。您需要的是修改现有的Person类以包含此信息。

由于有关某人关注或关注的人的信息基本上是关于该人的信息,因此您不应该真正需要定义新类来实现该功能。

我建议像这样修改你的人。

class Person(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)
    following = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True, null=True)

这一行的作用是在Person类及其自身之间建立多对多的关系。

许多关系与其他关系有点不同,我建议您阅读Django文档https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

但您现在应该可以设置和访问这样的关系了。

>>>john = Person.objects.get(name="John")
>>>diana = Person.objects.get(name="Diana")
>>>john.following.add(diana)//setup the many to many relationship
>>>john.save()

>>>john.following.all()
//This should return a queryset of Person objects which john is following.
//eg Diana

>>>diana.followers.all()
//This should return a queryset of Person objects which are following Diana.
//eg. John.

简单,Django真棒!