2013-03-12 65 views
1

我一直在試圖創建一個應用程序,允許用戶從昨天和今天開始遵循每個其他配置文件,到目前爲止我還沒有成功。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'),) 

我試着檢索特定用戶跟隨用戶用它對付我的模塊,如人,但它給了我一個錯誤沒有查詢存在。

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

@catherine我不知道如何正確解釋,但我會嘗試。即時嘗試創建一個類和該類的目的是當用戶跟隨​​另一個用戶。我可以檢索並顯示他所關注用戶的棋盤 – donkeyboy72 2013-03-12 04:55:54

回答

1

如果我理解正確,youu是在正確的軌道與多對多的關係。您需要修改現有的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) 

這條線所做的是讓人類與自我之間形成多對多的關係。

多對多關係與其他關係有點不同,我建議您閱讀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有多棒!

+0

好的,例如,如果約翰跟隨戴安娜和彼得。我如何顯示戴安娜和彼得的名字?我如何才能將它與戴安娜的董事會等其他模塊聯繫起來? – donkeyboy72 2013-03-12 04:41:19

+0

我向你學習如何查詢用戶所關注的所有人。在場景中。我想顯示John正在關注的所有用戶板,我該怎麼做?以下不與用戶 – donkeyboy72 2013-03-12 04:48:56

+0

Assoicated它在評論中有點難以解釋,它可能是值得再問一個問題(或兩個,因爲你的兩個評論是問不同的東西)。第一個,你需要獲得用戶對象,然後反向工作以獲得董事會。 請記住多對多關係返回一個查詢集。不是物體本身。這可能是你的問題。 – 2013-03-12 04:59:40