Django ModelForm

Я пытаюсь создать простой CRUD с помощью ModelForm. Он отлично работает, за исключением того, что каждый раз, когда я редактирую, при сохранении создается новый экземпляр данных. Поэтому я редактирую и получаю дополнительную строку в БД вместо обновленной. Я не понимаю, как он знает, как сохранить существующую благотворительность, поскольку он не сохраняет PK (id) как скрытое поле в форме. Так я всегда поступал, прежде чем попытаться использовать «потрясающую» ModelForm!

Это сводит меня с ума, я все прочитал и, насколько я могу судить, все делаю правильно.

Вот мой код. .

Модель:

from django.db import models
from django.conf import settings

COUNTRY_CHOICES = settings.COUNTRIES

class Charities(models.Model):
    charity_name            = models.CharField(max_length=100)
    country                 = models.CharField(max_length=4, choices=COUNTRY_CHOICES)
    registration_number     = models.CharField(max_length=100)
    address1                = models.CharField(max_length=100)
    address2                = models.CharField(max_length=100)
    city                    = models.CharField(max_length=30)
    zip                     = models.CharField(max_length=10)
    phone                   = models.CharField(max_length=20)
    email                   = models.EmailField()
    charity_logo_image      = models.CharField(max_length=100)
    charity_banner_image    = models.CharField(max_length=100)
    charity_accepted        = models.IntegerField()

    def __str__(self):
       return self.charity_name

    def __unicode__(self):
        self.charity_name

Вид:

def list(request):
    charities = Charities.objects.all()
    return render_to_response('charities_charity_list.html', {'charities': charities})

def add(request):
    return add_or_edit(request)

def edit(request, charity_id):
    return add_or_edit(request, charity_id)

def add_or_edit(request, charity_id=None):
    print "ID = " + str(charity_id)  
    form = CharityForm(request.POST or None,
                   instance=charity_id and Charities.objects.get(pk=charity_id))

    # Save new/edited student
    if request.method == 'POST' and form.is_valid():
        print form
        form.save()
        return HttpResponseRedirect('/charities/list/')

    return render_to_response('charities_charity_edit.html', {'form': form})

Форма:

class CharityForm(ModelForm):
    class Meta:
        model = Charities

Шаблон:

{% extends "base.html" %}

{% block title %}Charities Add{% endblock %}
{% block content %}

<form method="post" action="/charities/add/" id="save"><table cellpadding="0">{{ form.as_table}}</table><input type="submit" value="Save"></form>
{% endblock %}
5
задан Rich 22 September 2010 в 02:27
поделиться