1

从昨天到今天,我一直在尝试创建一个允许用户互相关注个人资料的应用程序,但到目前为止我还没有成功。

我无法创建一个允许我从他关注的特定用户中检索用户的关注函数。

例子 。如果约翰跟随戴安娜。我希望能够检索名为 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,但它给了我一个错误 No query exist。

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)一起使用的关注类?

有人能帮我吗 。感谢社区!

4

1 回答 1

1

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

由于有关某人关注或关注谁的信息本质上是有关该人的信息,因此您实际上不需要定义一个新类来实现该功能。

我建议像这样修改你的 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 真棒!

于 2013-03-12T02:54:16.463 回答