2017-04-12 80 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

看起來你需要轉換你的模型。如果您可以提供您正在使用的結構樣本,這將有所幫助。仍然讓我們嘗試解決您的查詢。首先,您需要確定選擇不過是一個多對多的領域。將它保存在數據庫中應該會更容易一些。如果你想使一個默認的形式,你可以簡單地做這樣的事情

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

很高興在這裏,這幫助你。您是否也可以標記答案,以便面臨相同問題的其他人可以使用相同的邏輯?謝謝 –