Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- === MODELS ===
- class Person(models.Model):
- name = models.CharField(max_length=32, blank=False)
- creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
- groups = models.ManyToManyField(PersonGroup)
- def __str__(self):
- return self.name
- class PersonContact(models.Model):
- TYPE_VKONTAKTE='VK'
- TYPE_PHONE='PH'
- TYPE_TELEGRAM='TG'
- TYPE_CHOICES = (
- (TYPE_VKONTAKTE, 'VKontakte'),
- (TYPE_PHONE, 'Mobile phone'),
- (TYPE_TELEGRAM, 'Telegram'),
- )
- type = models.CharField(max_length=2, choices=TYPE_CHOICES)
- value = models.CharField(max_length=32, blank=False)
- person = models.ForeignKey(Person, on_delete=models.CASCADE)
- def __str__(self):
- return self.name
- === FORMS ===
- class PersonForm(ModelForm):
- groups_select = forms.ModelMultipleChoiceField(queryset=None)
- def __init__(self, user, *args, **kwargs):
- super(PersonForm, self).__init__(*args, **kwargs)
- self.fields['groups_select'].queryset = PersonGroup.objects.filter(creator = user)
- class Meta:
- model = Person
- fields = ('name',)
- ContactFormset = inlineformset_factory( Person,
- PersonContact,
- fields=('type', 'value'),
- extra=1,
- )
- === VIEWS ===
- @login_required
- def personal_person_add(request):
- if request.method == 'POST':
- person_form = PersonForm(request.user, request.POST or None)
- newperson = person_form.instance
- newperson.creator = request.user
- if person_form.is_valid():
- form = person_form.save(commit=False)
- contacts_form = ContactFormset(request.POST, instance=form)
- if contacts_form.is_valid():
- person_form.save()
- contacts_form.save()
- return redirect('persons')
- else:
- contacts_form = ContactFormset()
- person_form = PersonForm(request.user)
- return render(
- request,
- 'app/form_person.html',
- {
- 'form_person': person_form,
- 'form_contacts': contacts_form,
- }
- )
- === TEMPLATE ===
- {{form_person}}
- {{form_contacts.management_form}}
- {% for form in form_contacts %}
- <div class="link-formset">
- {{ form }}
- </div>
- {% endfor %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement