Add/update form

22 views
Skip to first unread message

Jagger

unread,
Sep 2, 2014, 6:18:41 PM9/2/14
to django...@googlegroups.com

Hi Everyone!



I intend to write an add/update form.


models.py:

class NewsTickerItem(models.Model):
    #Content
    content = models.CharField(max_length=60)
    #Highlighted
    is_highlighted = models.BooleanField()
    #Active
    is_active = models.BooleanField()
    # Ordering number
    ordernum = models.IntegerField()
    #Expiry time
    expiry_time = models.DateTimeField()

    def __unicode__(self):
        return self.content



forms.py:

class NewsTickerItemForm(ModelForm):
    class Meta:
        model = NewsTickerItem



urls.py:

                       url(r'^spadmin_newstickeritem_changeform/add/$', views.spadmin_newstickeritem_changeform,
                           name='spadmin_newstickeritem_changeform_add'),
                       url(r'^spadmin_newstickeritem_changeform/(?P<newstickeritem_id>\d+)/$', views.spadmin_newstickeritem_changeform,
                           name='spadmin_newstickeritem_changeform_update'),

I have a link (spadmin_newstickeritem_changeform_add) on my webpage to add new items, and another link (spadmin_newstickeritem_changeform_update) to update existing items. Both links refer to views.spadmin_newstickeritem_changeform method.



views.py:

def spadmin_newstickeritem_changeform(request, newstickeritem_id = None):
    if request.method == 'POST':
        if newstickeritem_id:
            newstickeritem = NewsTickerItem.objects.get(pk=newstickeritem_id)
            form = NewsTickerItemForm(request.POST, instance=newstickeritem)
        else:
            form = NewsTickerItemForm(request.POST)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('spadmin_newstickeritem_changelist'))
    else:
        if newstickeritem_id:
            newstickeritem = NewsTickerItem.objects.get(pk=newstickeritem_id)
            form = NewsTickerItemForm(instance=newstickeritem)
        else:
            form = NewsTickerItemForm()

    context = {'functiontitle': 'Newsticker item', 'form': form, 'newstickeritem_id': newstickeritem_id}
    return render(request, 'spweb/spadmin/spadmin_newstickeritem_changeform.html', context)

I treat adding, and updating in one method.



spadmin_newstickeritem_changeform.html:

{% extends "spweb/spadmin/spadmin_base_ext.html" %}
{% block content %}
<form action="{% url 'spadmin_newstickeritem_changeform_update' newstickeritem_id %}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save" />
</form>
{% endblock %}



It works on update, because the newstickeritem_id exists. If newstickeritem_id == None (in case of adding a new item), I get this error message:
"Reverse for 'spadmin_newstickeritem_changeform_update' with arguments '(None,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['spadmin_newstickeritem_changeform/(?P<newstickeritem_id>\\d+)/$']"

How can I handle newstickeritem_id == None. How can I change form action to spadmin_newstickeritem_changeform_add, in case of adding a new item. Should I make different adding and updating templates?


Thanks for your answers!




Jagger

unread,
Sep 2, 2014, 6:26:34 PM9/2/14
to django...@googlegroups.com
I realized, this could be the solution:

I changed spadmin_newstickeritem_changeform.html this way:


{% extends "spweb/spadmin/spadmin_base_ext.html" %}
{% block content %}
{% if newstickeritem_id %}

<form action="{% url 'spadmin_newstickeritem_changeform_update' newstickeritem_id %}" method="post">
{% else %}
<form action="{% url 'spadmin_newstickeritem_changeform_add' %}" method="post">
{% endif %}

{% csrf_token %}
 {{ form.as_p }}
 <input type="submit" value="Save"/>
 </form>
 {% endblock %}

Reply all
Reply to author
Forward
0 new messages