-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathforms.py
140 lines (109 loc) · 4.7 KB
/
forms.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import datetime
from django import forms
from django.contrib.auth.models import User
from quanda.models import Question, QuestionList, QuestionListOrder, QuestionTag, Answer, Profile, Comment
from quanda.utils import strip_js
class QuestionForm(forms.ModelForm):
tags = forms.ModelMultipleChoiceField(queryset=QuestionTag.objects.all(), widget=forms.CheckboxSelectMultiple, required=False)
class Meta:
model = Question
exclude = ['author', 'posted', 'last_modified', 'view_count']
def __init__(self, author, *args, **kwargs):
super(QuestionForm, self).__init__(*args, **kwargs)
self.author = author
def save(self, *args, **kwargs):
kwargs['commit'] = False
question = super(QuestionForm, self).save(*args, **kwargs)
if self.author.is_authenticated():
question.author = self.author
else:
question.author = User.objects.get(username='anonymous_user')
question.title = strip_js(question.title)
question.question_text = strip_js(question.question_text)
question.last_modified = datetime.datetime.now()
question.save()
if self.cleaned_data['tags']:
question.tags = []
for tag in self.cleaned_data['tags'].all():
question.tags.add(tag)
question.save()
return question
class QuestionTagForm(forms.ModelForm):
class Meta:
model = QuestionTag
fields = ['title']
def save(self, *args, **kwargs):
tag = super(QuestionTagForm, self).save(*args, **kwargs)
tag.title = tag.title.lower()
tag.save()
return tag
class AnswerForm(forms.ModelForm):
class Meta:
model = Answer
fields = ['answer_text']
def __init__(self, author, question, *args, **kwargs):
if kwargs.has_key('edit'):
self.edit = kwargs['edit']
del kwargs['edit']
super(AnswerForm, self).__init__(*args, **kwargs)
self.author = author
self.question = question
def save(self, *args, **kwargs):
kwargs['commit'] = False
answer = super(AnswerForm, self).save(*args, **kwargs)
if self.author.is_authenticated():
answer.author = self.author
else:
answer.author = User.objects.get(username='anonymous_user')
answer.question = self.question
answer.answer_text = strip_js(answer.answer_text)
answer.last_modified = datetime.datetime.now()
answer.save()
return answer
def clean(self):
if not hasattr(self,'edit') and self.author.is_authenticated():
if Answer.objects.filter(question=self.question, author=self.author):
raise forms.ValidationError("You've already answered this question.")
return self.cleaned_data
class RepForm(forms.Form):
base_rep = forms.IntegerField()
#username = forms.CharField(max_length=140, widget=forms.HiddenInput, required=True)
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
exclude = ['user', 'reputation']
def __init__(self, user, *args, **kwargs):
super(ProfileForm, self).__init__(*args, **kwargs)
self.user = user
def save(self, *args, **kwargs):
kwargs['commit'] = False
profile = super(ProfileForm, self).save(*args, **kwargs)
profile.bio = strip_js(profile.bio)
profile.user = self.user
profile.save()
return profile
class QuestionListForm(forms.ModelForm):
class Meta:
model = QuestionList
exclude = ['created', 'questions']
class QuestionListOrderForm(forms.ModelForm):
class Meta:
model = QuestionListOrder
class QuestionListAddForm(forms.Form):
question = forms.IntegerField(required=True, label='Question id')
def __init__(self, list, *args, **kwargs):
super(QuestionListAddForm, self).__init__(*args, **kwargs)
self.list = list
def clean_question(self):
id = self.cleaned_data['question']
try:
question = Question.objects.get(pk=id)
except Question.DoesNotExist:
raise forms.ValidationError("This question does not exist")
if QuestionListOrder.objects.filter(question_list=self.list, question=question):
raise forms.ValidationError("This question is already on the list")
return id
class CommentForm(forms.Form):
comment_text = forms.CharField(label='', required=True)
content_type = forms.CharField(widget=forms.HiddenInput, required=True)
object_id = forms.IntegerField(widget=forms.HiddenInput, required=True)