3

私は、ユーザーが本のコレクションに投票できるプロジェクトに取り組んでいます。私のモデルは次のようになります。

class Collection(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=31)

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    collection = models.ForeignKey(Collection)

vote_choices = ((-1,'Bad'),
                (0, 'Not good, Not bad'),
                (1,'Good'))

class Vote(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, related_name='votes')
    book = models.ForeignKey(Book)
    vote = models.IntegerField(choices=vote_choices)

ユーザーが特定のコレクション内のすべての本を表示し、それらの本に一度に投票できるビューを表示する必要があります。これは、すべての本をループして投票するよりもはるかにユーザーフレンドリーだからです。したがって、すべてのフォームが存在するフォームセットが必要です。本とその投票です。

当初、これはフォームセットを使用する良い機会だと思いました(これまで使用したことはありませんが、フォームやモデルフォームの操作に慣れています)が、このフォームセットの作成方法に問題があります。

理論的には、すべての投票を簡単に作成/更新できるため、ジェネリッククラスベースのビューを使用したいと思いますが、これを行う方法がわかりません。

今のところ、CollectionモデルとUser(from django.contrib.auth.model)モデルの間に直接の関係はありませんが、これで簡単にできる場合は、追加してもかまいません。すべてのユーザーが投票によって本にリンクされ、すべての本がコレクションにリンクされているため、実際には必要ありません。

フォームセットを使用するのか、通常のモデルフォームのみを使用するのかわかりません。

どうしますか?助けてくれてありがとう。

4

1 に答える 1