私は単純なモデルで作業していましたが、ModelFormデータを保存する際に問題がありました。私は、ユーザーがデータベース内の既存の "グループ"オブジェクトを作成して編集できるようにしたいと考えています。ユーザーが既存のグループを「編集」することを選択した場合、結果のフォームにそのオブジェクトの既存のデータがあらかじめ設定されていることを確認します。次に、「保存」をクリックすると、変更されたデータが更新されます。私が使っているモデルとビューは以下の通りです。私が持っている問題は、form.is_valid()がTrueを返さないということです。私はここで間違って何をしていますか?django ModelForm help
MODEL
class Analyst(models.Model):
def __unicode__(self):
return unicode("%s, %s"%(self.last, self.first))
id = models.AutoField(primary_key=True)
first = models.CharField(max_length=32)
last = models.CharField(max_length=32)
class Alias(models.Model):
def __unicode__(self):
return unicode(self.alias)
alias = models.CharField(max_length=32)
class Octet(models.Model):
def __unicode__(self):
return unicode(self.num)
num = models.IntegerField(max_length=3)
class Group(models.Model):
def __unicode__(self):
return unicode(self.name)
name = models.CharField(max_length=32, unique=True) #name of the group
id = models.AutoField(primary_key=True) #primary key
octets = models.ManyToManyField(Octet, blank=True) #not required
aliases = models.ManyToManyField(Alias, blank=True) #not required
analyst = models.ForeignKey(Analyst) #analyst assigned to group, required
VIEW
class GroupEditForm(ModelForm):
class Meta:
model = Group
def index(request):
if request.method == 'GET':
groups = Group.objects.all().order_by('name')
return render_to_response('groups.html',
{ 'groups': groups, },
context_instance = RequestContext(request),
)
def edit(request):
if request.method == "POST": #a group was selected and the submit button clicked on the index page
form = GroupEditForm(instance = Group.objects.get(name=request.POST['name'])) #create a form and pre-populate existing data for that object
elif request.method == "GET": #the "add new" button was clicked from the index page
form = GroupEditForm() #create a new form with no data pre-populated
return render_to_response('group_edit.html',
{ 'form': form, },
context_instance = RequestContext(request),
)
def save(request):
if request.method == "POST":
form = GroupEditForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/groups/')
と関連テンプレート
テンプレート
<h1>Edit Group Information</h1>
<form method="post" action="/groups/edit/save/">{% csrf_token %}
<div class="edit">
<br></br>
{{form}}
</div>
<br></br>
<input type="submit" value="Save">
<a href="/groups/"><input type="button" name="cancel" value="Cancel" /></a>
</form>
"primary_key = Trueを" 非常に良いヒントとして別のfielsを指定しないとあなたのためにこれがそうであるように、あなたに感謝。新しいレコードを追加しようとしています。しかし、私は既存のオブジェクトを編集しようとすると、重複している名前についてのdjango.db.IntegrityErrorを取得しています(一意= True)。既存のレコードを変更するのではなく、まったく新しいレコードを保存しようとしているようです。既に存在しているか、または便利な更新機能があるかどうかを確認するために、ビューに何かをコーディングする必要がありますか? – nnachefski