Skip to content

Instantly share code, notes, and snippets.

@happychallenge
Last active September 24, 2017 12:24
Show Gist options
  • Save happychallenge/b781cbb2788e50838ce03705f7ff2753 to your computer and use it in GitHub Desktop.
Save happychallenge/b781cbb2788e50838ce03705f7ff2753 to your computer and use it in GitHub Desktop.
forms.ModelMultipleChoiceField 을 처리하는 방법
class PersonForm(forms.ModelForm):
jobs = forms.ModelMultipleChoiceField(queryset=Job.objects.all(),
widget=forms.CheckboxSelectMultiple)
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(), widget=forms.SelectMultiple)
x = forms.FloatField(widget=forms.HiddenInput(),required=False)
y = forms.FloatField(widget=forms.HiddenInput(),required=False)
width = forms.FloatField(widget=forms.HiddenInput(),required=False)
height = forms.FloatField(widget=forms.HiddenInput(),required=False)
picture = forms.FileField(required=False)
class Meta:
model = Person
fields = ['name', 'nick_name', 'birth_year', 'jobs', 'picture', 'url', 'x', 'y', 'width', 'height', ]
widgets = {
'picture': forms.FileInput(attrs={
'accept': 'image/*' # this is not an actual validation! don't rely on that!
})
}
class Person(models.Model):
"""docstring for Person"""
""" 생략 """
name = models.CharField(max_length=30)
nick_name = models.CharField(max_length=30, verbose_name='별칭', null=True, blank=True)
birth_year = models.IntegerField(null=True, verbose_name='출생년도', blank=True)
sex = models.CharField(max_length=1, choices=SEX, default=MALE)
jobs = models.ManyToManyField(Job, blank=True) # ManyToManyField
picture = models.ImageField(upload_to='person_picture/%Y/%m/', null=True, blank=True)
url = models.URLField(null=True, blank=True)
regions = models.ManyToManyField(Region, blank=True)
tags = models.ManyToManyField('Tag', blank=True) # ManyToManyField
""" 생략 """"
class Meta:
ordering = ['name',]
def __str__(self):
return self.name
@login_required
def add_person(request):
if request.method == 'POST':
tag_array = []
form = PersonForm(request.POST, request.FILES)
if form.is_valid():
person = form.save()
name = form.cleaned_data.get('name')
if not person.nick_name:
person.nick_name = name
person.created_user = request.user
person.save()
# Jobs
jobs = form.cleaned_data.get('jobs')
if jobs:
person.jobs.set(jobs)
# Tags
tags = form.cleaned_data.get('tags')
if tags:
tag_list = tags.split(',')
for tag in tag_list:
tag = tag.strip()
tagged, created = Tag.objects.get_or_create(tag=tag)
tag_array.append(tagged)
tagged, created = Tag.objects.get_or_create(tag=name)
tag_array.append(tagged)
person.tags.set(tag_array)
messages.success(request, "{} 이 추가 되었습니다.".format(name))
return redirect('records:check_event', person.id)
else:
person = request.GET.get('person')
form = PersonForm(initial={'name':person})
return render(request, 'records/add_person.html', {'form':form})
@login_required
def edit_person(request, person_id):
person = get_object_or_404(Person, id=person_id)
if request.method == 'POST':
tag_array = []
form = PersonForm(request.POST, request.FILES, instance=person)
if form.is_valid():
person = form.save()
name = form.cleaned_data.get('name')
# Jobs
jobs = form.cleaned_data.get('jobs')
if jobs:
person.jobs.set(jobs)
# Jobs
tags = form.cleaned_data.get('tags')
if tags:
person.tags.set(tags)
person.created_user = request.user
person.save()
messages.success(request, "{} 이 수정 되었습니다.".format(name))
return redirect('records:person_detail', person.id)
else:
form = PersonForm(instance=person)
return render(request, 'records/add_person.html', {'form':form})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment