我一直在努力创建一个应用程序,允许用户从昨天到今天跟随对方的个人资料,到目前为止我还没有成功。
我在创建以下函数时遇到问题,该函数允许我从他跟随的特定用户中检索用户。
示例。如果约翰跟随戴安娜。我希望能够检索名为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)一起使用?
有人能帮助我吗?谢谢你的社区!
答案 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真棒!