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

これらのソリューションのほとんどは、私に質問をしませんでした

これは私が試した解決策の1つでした。

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 などのモジュールで使用できるようにする次のクラスを作成するにはどうすればよいですか?

誰かが私を助けることができます。ありがとうコミュニティ!

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 に答える