我是Django的新手,需要一些关于我得到的视图错误的帮助。
如果请求方法是GET,我编写了一个显示“Groups”数据表的视图,或者如果请求方法是POST,则显示一个表单来编辑特定的“Group”(要编辑的项目与POST数据一起传递) )。
此外,如果在现有项目上进行POST,我希望该表格预先填充了该项目表格中已有的数据。我已经把它全部搞定了,除非我转到保存已编辑的表单,我不断收到此错误:
“无法在指定中间模型的ManyToManyField上设置值”
非常感谢任何帮助。此外,我是所有这些网络开发人员的新手,所以如果我做的事情完全愚蠢或者缺少一个概念,请随意给我发火焰。 ; - )
模型
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) #name of the group
id = models.AutoField(primary_key=True) #primary key
octets = models.ManyToManyField(Octet, through='OctetAssignment', blank=True) #not required
aliases = models.ManyToManyField(Alias, through='AliasAssignment', blank=True) #not required
class OctetAssignment(models.Model):
octet = models.ForeignKey(Octet) #octet
group = models.ForeignKey(Group) #group that octet is assigned to
class AliasAssignment(models.Model):
alias = models.ForeignKey(Alias)
group = models.ForeignKey(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),
)
elif request.method == "POST":
g = Group.objects.get(id=request.POST['id'])
form = GroupEditForm(instance=g)
return render_to_response('groups.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('/tradedesk/groups/') # Redirect after POST
要使其完整,这里是我正在使用的表单模板代码,用于呈现表格和编辑页面。 的模板
<h1>Group Information</h1>
{% if groups %}
<table border=1>
{% for group in groups %}
<tr>
<td>{{group.name}}</td>
<td>{% for octet in group.octets.all %} {{octet}} {% endfor %}</td>
<td>{% for alias in group.aliases.all %} {{alias}} {% endfor %}</td>
<td>{{group.analyst}}</td>
</tr>
{% endfor %}
</table>
<br></br>
<form method="post" action="/groups/">{% csrf_token %}
<select name="id" >
{% for group in groups %}
<option value="{{group.id}}">{{group.name}}</option>
{% endfor %}
</select>
<input type="submit" value="Edit">
</form>
{% endif %}
{% if form %}
<form method="post" action="/groups/save/">{% csrf_token %}
{{form}}
<br></br>
<input type="submit" value="Save">
<form>
{% endif %}
</div>
答案 0 :(得分:1)
尝试删除中间模型OctetAssignment和AliasAssignment。只有在要向其添加自定义字段时才应使用它们。否则Django会自己创建它们并透明地使用它们。