2017-10-03 7 views
2

私は、Twitterのようなフォローシステムを実装しようとしています(1人のユーザーが従うことができ、多くのユーザーが従うことができます)。私はいくつかの方法を試しましたが、私は間違いを続けています。現在、フォーム全体にデバッガーやステートメントをドロップするたびに、私は決してクリーンメソッドに入ることはなく、kwargには値が設定されていないことがわかります。シンプルなDjangoフォーム

私は、フォームへの引数としてfollower & followingに渡し、ちょうど__init__に割り当てることができるようにしたいが、すべてが間違って起こっています。私がJavascript(React & Redux)で応答を返すとき、私はすべてがエラーです。follower & following「このフィールドは必須です。

モデル

class User(AbstractBaseUser, PermissionsMixin): 
    username = models.CharField(max_length=100, unique=True) 
    email = models.EmailField(unique=True) 
    is_active = models.BooleanField(default=True) 
    is_staff = models.BooleanField(default=False) 
    is_admin = models.BooleanField(default=False) 
    date_joined = models.DateTimeField(auto_now=True) 

    objects = UserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['username'] 

    class Meta: 
     verbose_name = 'user' 
     verbose_name_plural = 'users' 

class UserFollow(models.Model): 
    follower = models.ForeignKey('User', models.CASCADE, related_name='follows') 
    following = models.ForeignKey('User', models.CASCADE, related_name='followed_by') 

    class Meta: 
     unique_together = ('follower', 'following') 

    def to_user(self): 
     return { 
      'id': self.pk, 
      'follower': self.follower.pk, 
      'following': self.following.pk 
     } 

ビュー

def follow(request, id): 
    following = User.objects.get(pk=id) 
    form = UserFollowForm(follower=request.user, following=following) 
    if form.is_valid(): 
     user_follow = form.save() 
     return JsonResponse({'user_followed': following.to_user()}) 
    return JsonResponse({'error': form.errors}, status=400) 

フォーム

を:ここで

は、私がこれまで持っているものです

答えて

3

フォームにデータを渡していないため、バインドされておらず、検証もされません。

しかし、ここでフォームを使用したい理由がわかりません。ユーザーから投稿されたデータを取得したくないと思われ、実行する検証はありません。 UserFollowインスタンスを直接作成するだけです。

def follow(request, id): 
    following = User.objects.get(pk=id) 
    user_follow = UserFollow.objects.create(follower=request.user, following=following) 
    return JsonResponse({'user_followed': user_follow.to_user()}) 
+0

データとは、 'data = {....} 'のような引数を意味しますか?そして、あなたの第2のポイントとして、それは興味深い考えです。私は、フォームをすべてのものに使うというアイデアに慣れてきており、特に意図しているものを覚えているわけではありません。 –

+0

答えに記載されているとおり、あなたがそれを扱う方法は、フォームを渡すことは無意味です。しかし、ええ、フォームを開始するには、 '' form = UserFollowForm(data = request.POST) '' 'を実行する必要があります。フィールドはキー名から塗りつぶされ、その他はkwargsで送られます – Bestasttung

関連する問題