Skip to content

Instantly share code, notes, and snippets.

@citadelgrad
Created August 4, 2016 23:43
Show Gist options
  • Save citadelgrad/8711a2f349a0ce621697f2802227a22b to your computer and use it in GitHub Desktop.
Save citadelgrad/8711a2f349a0ce621697f2802227a22b to your computer and use it in GitHub Desktop.
""" HTML
<form action="." method="POST">
{% csrf_token %}
{{ form.as_p }}
{{ formset.as_p }}
<input type="submit" value="Create/Update Template">
</form>
"""
""" views.py """
class UpdateMessageView(LoginRequiredMixin, StaffuserRequiredMixin, UpdateView):
model = Message
form_class = MessageForm
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(UpdateMessageView, self).get_context_data(**kwargs)
message = Message.objects.get(pk=self.kwargs['pk'])
formset = MessageFormSet(instance=message)
context.update(formset=formset)
return context
def form_valid(self, form):
formset = MessageFormSet(self.request.POST, instance=form.instance)
if form.is_valid():
form.save()
elif formset.is_valid():
formset.save()
else:
return self.form_invalid(form)
return super(UpdateMessageView, self).form_valid(form)
def get_success_url(self):
return reverse("st_message")
""" forms.py """
MessageFormSet = inlineformset_factory(Message, MessageSection, fields=('section',),
max_num=1, widgets={'section': forms.Textarea(attrs={'cols': 80, 'rows': 20})})
class MessageForm(forms.ModelForm):
class Meta:
model = Message
fields = ["name", "subject", "email_template"]
""" models.py """
class Message(models.Model):
name = models.CharField(max_length=150)
email_template = models.ForeignKey(EmailTemplate)
subject = models.CharField(max_length=300)
def __unicode__(self):
return self.name
class MessageSection(models.Model):
name = models.CharField(max_length=150)
message = models.ForeignKey(Message)
section = models.TextField(blank=True)
def __unicode__(self):
return self.name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment