2017-04-12 21 views
0

私は自分のクラスの投票システムを採用しています。私はmodel-formとを使って投票フォームを提供します。私はフィールドでchoicesを使用していますが、私はちょうどがチェックボックスの最後の値を保存することを知り、選択されたすべての選択肢をリストとして保存したいかもしれません。私はform_valid()メソッドを変更しようとしましたが、私はちょうど私がすべてのフィールドを繰り返す必要があることを知っています。それは柔軟ではありません。そして、私は他の解決策を見つけることができません...djangoで選択肢の値を保存する方法

どうすればこの要件を満たすことができますか?私は本当に初心者です。

ありがとうございます。

私は質問を提出した後、このような短い間隔で返信するため、以下の友人に感謝します。ここに私のコードです。

models.py

CHOICES = (('m','Math'),('f','French'),('s','Science'),('l','literature')) 
class Poll(models.Model): 
    [...] 
    subject = models.CharField(max_length = 5,choices = CHOICES, blank=True) 
    [...]` 

forms.py

class PollForm(forms.ModelForm): 
    model = Poll 
    fields = [..., 'subject', ...] 
    widgets = {'subject':forms.CheckboxSelectMultiple} 

views.py

class PollView(CreateView): 
    form_class = PollForm 
    template_name = 'poll.html' 

学生は、彼らがしたい科目を選択することができます。

答えて

0

モデルを変換する必要があるようです。使用している構造のサンプルを提供できる場合は、参考にしてください。まだあなたの質問を解決しようとします。まず、選択肢が多対多分野に過ぎないことを確認する必要があります。 dbに保存するのはちょっと簡単です。ユーザーの選択肢を例にして試すことができます:

class Choices(models.Model): 
    description = models.CharField(max_length=100) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, blank=True, unique=True, verbose_name='profile_user') 
    choices = models.ManyToManyField(Choices) 
    def __unicode__(self): 
    return self.name 

を今、あなたはあなたが単にような何かを行うことができ、デフォルトのフォームにしたい場合:

class ProfileForm(forms.ModelForm): 
    Meta: 
    model = UserProfile 

今すぐあなたのメインビューが来るの。これは、あなたのユースケースが要求するものに編集してレンダリングすることができます:

if request.method=='POST': 
    form = ProfileForm(request.POST) 
    if form.is_valid(): 
    profile = form.save(commit=False) 
    profile.user = request.user 
    #Implement this as a pre-save so that you can add additional value 
    profile.save() 
else: 
    form = ProfileForm() 

これが役に立ちます。

+0

ありがとうございました!私は必要に応じて更新する! – ucag

+0

これがあなたを助けてくれて幸いです。同じ問題に直面している他の人が同じロジックを使用できるように、回答をマークすることもできますか?ありがとう –

関連する問題