2
私は、ユーザーに新しいグループを作成したり、既存の "Group"オブジェクトを編集する機会を与えるModelFormを持っています。既存の「編集」が要求されている場合は、フォームデータに既存の情報をあらかじめ入力しておく必要があります。ユーザーが既存のオブジェクトの編集を「保存」すると、次のエラーが表示されます。django ModelForm "unique = True"
「この名前のグループは既に存在します」
同じ名前の新しいオブジェクトを作成するのではなく、オブジェクトを「更新」するようにDjangoに指示するにはどうすればよいですか?
MODEL
class Analyst(models.Model):
first = models.CharField(max_length=32)
last = models.CharField(max_length=32)
def __unicode__(self):
return "%s, %s" % (self.last, self.first)
class Alias(models.Model):
alias = models.CharField(max_length=32)
def __unicode__(self):
return "%s" % (self.alias)
class Octet(models.Model):
num = models.IntegerField(max_length=3)
def __unicode__(self):
return "%s" % (self.num)
class Group(models.Model):
name = models.CharField(max_length=32, unique=True) #name of the group
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
def __unicode__(self):
return "%s" % (self.name)
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":
form = GroupEditForm(instance = Group.objects.get(name=request.POST['name']))
elif request.method == "GET":
form = GroupEditForm()
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(commit=True)
return HttpResponseRedirect('/groups/')
return render_to_response('group_save.html',
{ 'test': form.errors, })
非常にいいです、助けてくれてありがとう。私は上記のコードで "save()は正確に2つの引数(1が与えられます)"というエラーが発生します。 – nnachefski
休憩スタイルのURLを使用する場合は、urls.pyを編集してグループIDを渡す必要があります。たとえば、 "/ groups/save/20"と入力すると、20のグループが保存されます。urlパターンは次のようなものです:url(r '^ group/save /(?p \ d +)/ $、name = "group_save" )。あるいは、要求オブジェクトからグループIDを取得し、2番目の引数を削除することもできます。 –